Flutter 与多个导航器的深度链接

old*_*t76 9 android flutter

我正在编写一个 Flutter 应用程序,其中有一个底部导航栏。底部导航栏的每个选项卡都有自己的导航器,维护自己的导航堆栈。主屏幕上有一堆,Offstage Navigators通过点击底部导航选项卡可以在其可见性之间切换。

我正在使用该Navigator 1.0方法来处理我的所有导航。

我想以这样的方式启用深度链接,根据深度链接路由,我可以选择适当的底部导航选项卡来选择并将其推MaterialPageRoute送到Navigator负责该选项卡的位置。

我已经有了负责从应用程序内的任何位置在选项卡之间切换的逻辑。我还用来onGenerateRoute()确定在收到深层链接意图时应推送哪个路由。

我想知道是否可以以任何方式指示除根导航器之外的导航器推送所需的路线。MaterialApp这可以通过使用诸如onGenerateRoute或 之类的可能参数来完成吗onUnknownRoute?如果不重构和迁移到 ,这是否可行Navigator 2.0?

Laz*_*que 0

为每个导航器生成密钥,我假设有五个。

    final _navigatorsKeys =
      List.generate(5, (index) => GlobalObjectKey<NavigatorState>('$index'));
Run Code Online (Sandbox Code Playgroud)

将它们分配给各自的导航器

    Navigator(
      key: _navigatorKeys[0],
        initialRoute: homeViewRoute,
        onGenerateRoute: generateRoute
    ),
    Navigator(
          key: _navigatorKeys[1],
            initialRoute: homeViewRoute,
            onGenerateRoute: generateRoute
        )...
Run Code Online (Sandbox Code Playgroud)

您可以检查深层链接以定义应导航到哪个选项卡,我建议您根据每个导航项目为链接添加前缀。例如:home/post, me/profile。通过这样做,您可以在导航到实际页面之前更改选项卡索引。

最后,要使用第一个导航器导航到页面,您可以这样做:

_navigatorsKeys[0].currentState!.pushNamed('home/posts');
Run Code Online (Sandbox Code Playgroud)

希望能帮助到你。