start method
Future<RouterDest>
start(
- BuildContext context,
- String url, {
- Map<
String, dynamic> params = const {}, - InterceptorManager? interceptorManager,
Implementation
Future<RouterDest> start(BuildContext context, String url,
{Map<String, dynamic> params = const {}, InterceptorManager? interceptorManager}) async {
try {
var uri = Uri.parse(url);
var component = _tree.findByUri(uri);
component.addExtra(params);
var result = await (interceptorManager ?? InterceptorManager())
.runInterceptor(InterceptorContext(context, component));
switch (result.status) {
case RouterRunInterceptorResultStatus.pass:
if (component.value == null) {
print("Tetris lost: [$url}]");
throw RouterError(RouterErrorType.lost, null);
}
return RouterDest(component, (component.value as _Holder).builder);
case RouterRunInterceptorResultStatus.switched:
if (result.url != null) {
return start(context, result.url!, params: result.params);
}
assert(result.builder != null);
return RouterDest(component, result.builder!);
case RouterRunInterceptorResultStatus.rejected:
print("Tetris rejected: [$url}]");
throw RouterError(RouterErrorType.intercepted, result.error!);
default:
throw RouterError(RouterErrorType.other, result.error!);
}
} on RouterError catch (e) {
throw e;
} catch (error) {
debugPrint(error.toString());
throw RouterError(RouterErrorType.other, null);
}
}