颤振路由

时间:2018-08-23 09:09:43

标签: dart flutter

我的应用程序上有一个主屏幕/主屏幕,用户通过身份验证后就会显示该屏幕,我没有在MaterialApp类的routes参数上包括此屏幕,因为它在调用之前就已初始化,并导致许多错误:

        home: WelcomeScreen(),
        initialRoute: "/splash",
        routes: <String, WidgetBuilder>{
          "/welcome": (_) => WelcomeScreen(),
          "/splash": (_) => SplashScreen(),
          //"/main":(_)=>Main(),
        });

这就是我打开主屏幕的方式:

Navigator.of(context).pushAndRemoveUntil(MaterialPageRoute(
        builder: (context)=>Main()), (Route<dynamic> route) => false);

现在我有一个屏幕,我需要在其中弹出堆栈,直到完成一个过程的主屏幕为止,但是由于主屏幕未添加到routes中,因此我无法使用

导航到它
Navigator.popUntil(context, ModalRoute.withName("home screen here"));

是否只有在初始化时才将主屏幕添加到路由中?

更新: 我试图像这样调用主屏幕

Navigator.of(context).pushAndRemoveUntil(MaterialPageRoute(
        builder: (context)=>Main(),settings: RouteSettings(name: "/home")), (Route<dynamic> route) => false);

但是使用此方法时,我遇到了Could not find a generator for route异常:

Navigator.of(context).pushNamedAndRemoveUntil("/home", ModalRoute.withName("/home"));

1 个答案:

答案 0 :(得分:1)

很难说出这是怎么回事。

"/main"添加到命名路由列表中不会造成任何问题,因为routes仅包含WidgetBuilder,这意味着直到您按下Main构造函数"/main",并且应该没有初始化问题。不确定是什么原因导致您的问题,错误消息会有所帮助。


从您的命名路由中删除斜线可能是一个好主意,因为斜线表示存在名为"/"的路由,该路由是"welcome""splash""main"。我认为您真正想要的是三个顶级路线:

<String, WidgetBuilder>{
  "welcome": (_) => WelcomeScreen(),
  "splash": (_) => SplashScreen(),
  "main":(_) => Main(),
}

我发现的另一个问题是,您将/main添加到命名路由列表中,但是最后您要推送/home。也许是错字?