Flutter Navigator:动态初始路线

时间:2018-08-19 08:31:55

标签: navigation flutter

我的应用仅在首次启动时显示一些介绍屏幕。首次启动后,显示的第一个屏幕应该是我的HomePage。我尝试了以下路线:

"/" -> HomePage()
"/intro" -> IntroPage()

,然后像这样设置initialRoute

initialRoute: isFirstLaunch ? "/intro" : "/"

通过这种配置,当HomePage()IntroPage()时,Flutter首先将initialRoute放在导航堆栈上,并将"/intro"放在顶部。这很不好,因为HomePage()加载了CameraPreview,因此它要求许可并且占用大量资源。在我明确导航到首页之前,不应该加载它。

我也尝试了这种配置:

"/" -> IntroPage()
"/home" -> HomePage()

然后我将IntroPage()放在后面的堆栈上,这也不是我想要的。

任何想法如何解决?

3 个答案:

答案 0 :(得分:4)

"intro" -> IntroPage()
"home" -> HomePage()

确保两条路由都是没有父级的顶级路由。

答案 1 :(得分:2)

直接将所需的窗口小部件作为MaterialApp应用home来加载:

return MaterialApp(
      home: isFirstLaunch? IntroScreen():HomeScreen(),
    );

答案 2 :(得分:1)

MaterialApp的initialRoute属性的文档对此行为的解释如下:

  

如果路线包含斜线,则将其视为“深层链接”,   在推这条路之前,通向这条路的路是   推也。例如,如果路线为/ a / b / c,则该应用将   从加载的三个路由/ a,/ a / b和/ a / b / c开始,   订单。