Flutter Navigator:动态初始路线

hen*_*dra 3 navigation flutter

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

"/" -> HomePage()
"/intro" -> IntroPage()
Run Code Online (Sandbox Code Playgroud)

然后initialRoute像这样设置:

initialRoute: isFirstLaunch ? "/intro" : "/"
Run Code Online (Sandbox Code Playgroud)

通过该配置,Flutter首先将is HomePage()放在导航堆栈上,并将IntroPage()on放在顶部。这很糟糕,因为加载了,所以它会请求权限并且占用大量资源。在我明确导航到主页之前,不应该加载它。initialRoute"/intro"HomePage()CameraPreview

我也尝试了这种配置:

"/" -> IntroPage()
"/home" -> HomePage()
Run Code Online (Sandbox Code Playgroud)

然后我有了IntroPage()按后堆栈,这也不是我想要的。

知道如何解决吗?

azi*_*iza 6

直接将所需的小部件加载为您的MaterialApp应用程序怎么样home

return MaterialApp(
      home: isFirstLaunch? IntroScreen():HomeScreen(),
    );
Run Code Online (Sandbox Code Playgroud)


bof*_*mer 6

"intro": (BuildContext context) => IntroPage()
"home": (BuildContext context) => HomePage()
Run Code Online (Sandbox Code Playgroud)

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

  • “没有父级的顶级路由”是什么意思? (2认同)

Seb*_*gel 6

MaterialAppinitialRoute属性的文档对这种行为的解释如下:

如果路由包含斜杠,则将其视为“深层链接”,并且在推送此路由之前,还将推送通向此路由的路由。例如,如果路由是 /a/b/c,那么应用程序将按顺序加载三个路由 /a、/a/b 和 /a/b/c。