jumpTo<T> method

Future<T?> jumpTo<T>(
  1. String uri, {
  2. Map<String, dynamic>? arguments,
})

Implementation

Future<T?> jumpTo<T>(String uri, {Map<String, dynamic>? arguments}) async {
  var context = navigatorKey.currentContext;
  if (context == null) {
    return null;
  }
  var mapper = _mappingRouter[uri];
  if (mapper == null) {
    log("[$_tag]:未发现路由映射 $uri,强制跳转");
    return await Navigator.pushNamed(context, uri, arguments: arguments);
  }
  var interceptor = mapper.interceptor;
  var local = mapper.localUri;
  if (interceptor != null) {
    log("[$_tag]:$uri 拦截路由");
    Route? route = await interceptor.call(uri, local, arguments);
    if (route != null) {
      return await Navigator.push<T>(context, route as Route<T>);
    }
  }

  var args = await mapper.argsTransformer?.call(arguments) ?? arguments;
  log("[$_tag]:$uri 路由跳转->{$local,$args}");
  return await Navigator.pushNamed(context, local, arguments: args);
}