我的应用仅在首次启动时显示一些介绍屏幕。首次启动后,显示的第一个屏幕应该是我的HomePage
。我尝试了以下路线:
"/" -> HomePage()
"/intro" -> IntroPage()
,然后像这样设置initialRoute
:
initialRoute: isFirstLaunch ? "/intro" : "/"
通过这种配置,当HomePage()
为IntroPage()
时,Flutter首先将initialRoute
放在导航堆栈上,并将"/intro"
放在顶部。这很不好,因为HomePage()
加载了CameraPreview
,因此它要求许可并且占用大量资源。在我明确导航到首页之前,不应该加载它。
我也尝试了这种配置:
"/" -> IntroPage()
"/home" -> HomePage()
然后我将IntroPage()
放在后面的堆栈上,这也不是我想要的。
任何想法如何解决?
答案 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开始, 订单。