Flutter 在GlobalKey上调用popUntil时返回null的路由

Flutter 在GlobalKey上调用popUntil时返回null的路由,flutter,flutter-navigation,Flutter,Flutter Navigation,我正在使用全局密钥来处理导航。主要的省道、路线和导航服务如下。使用全局密钥的主要目的是使导航独立于上下文,以便在刷新令牌过期时,网络模块可以通过dio拦截器自动注销用户 class MyApp extends StatelessWidget { @override Widget build(BuildContext context) { return MaterialApp( title: 'AZY APP', navigato

我正在使用全局密钥来处理导航。主要的省道、路线和导航服务如下。使用全局密钥的主要目的是使导航独立于上下文,以便在刷新令牌过期时,网络模块可以通过dio拦截器自动注销用户

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
          return MaterialApp(
          title: 'AZY APP',
          navigatorKey: locator<NavigationService>().navigatorKey,
          onGenerateRoute: router.generateRoute,
          home: HomePageScreen())
          
}}
导航服务

class NavigationService {
  final GlobalKey<NavigatorState> navigatorKey =
      new GlobalKey<NavigatorState>();

  Future<dynamic> navigateTo(String routeName, {dynamic arguments}) {
    return navigatorKey.currentState.pushNamed(routeName, arguments: arguments);
  }

  pop(value) {
    print("pop");
    return navigatorKey.currentState.pop(value);
  }

  goBack() {
    print("goback");
    return navigatorKey.currentState.pop();
  }

  popUntil(String desiredRoute) {
    return navigatorKey.currentState.popUntil((route) {
      print("${route.settings.name}");
      return route.settings.name == desiredRoute;
    });
  }

  pushReplacementNamed(String route) {
    print("pushReplacementNamed");
    return navigatorKey.currentState.pushReplacementNamed(route);
  }
}
飞镖


Route<dynamic> generateRoute(RouteSettings settings) {
  final args = settings.arguments;

  switch (settings.name) {
    case routes.SplashScreenRoute:
      return MaterialPageRoute(builder: (context) => SplashScreen());

    case routes.LoginScreenRoute:
      return MaterialPageRoute(builder: (context) => LoginScreen());

    case routes.MainPageScreenRoute:
      return MaterialPageRoute(builder: (context) => MainPageScreen());

    case routes.HomePageScreenRoute:
      return MaterialPageRoute(builder: (context) => HomePageScreen());

    default:
      return MaterialPageRoute(
        builder: (context) => Scaffold(
          body: Center(
            child: Text('Error Loading Screen'),
          ),
        ),
      );
  }
}
NavigationService中除popUntil之外的所有功能都运行良好。对于每个路由,settings.name都为null,因此我无法将navigatorkey与popUntil一起使用


打印日志${route.settings.name}

问题是我没有将路由设置传递给路由器中的MaterialPage路由

MaterialPageRoute(
          settings: settings, builder: (context) => SplashScreen());

我正在做一些非常相似的事情,如果不等于你所做的。如何获取从navigatorKey.currentState.popvalue传递的值@若昂·奥帕尔马我只是在等待结果。var myResult=wait locator.navigateToroutes.SomePickerScreen;