如何使用多个导航器

时间:2017-09-30 12:34:15

标签: dart flutter

我目前在我的flutter应用程序中有一个MaterialApp,这使Navigator的使用非常简单,这很棒。但是,我现在正试图弄清楚如何为特定的视图/小部件创建更多的导航器。例如,我有一个自定义标签栏,其中包含另一个小部件/视图。我现在希望该小部件/视图拥有自己的导航堆栈。因此我的目标是将标签栏保持在顶部,同时从我的小部件/视图中导航到其他页面 这个问题几乎就是这样:Permanent view with navigation bar in Flutter但在该代码中,还没有MaterialApp。嵌套MaterialApp会给出时髦的结果,我不相信那会是一个解决方案 enter image description here

有什么想法吗?

2 个答案:

答案 0 :(得分:4)

您可以为每个页面创建新的Navigator。作为参考检查CupertinoTabView

或简单的例子:

import 'package:flutter/material.dart';

class Home extends StatelessWidget {
  Navigator _getNavigator(BuildContext context) {
    return new Navigator(
      onGenerateRoute: (RouteSettings settings) {
        return new MaterialPageRoute(builder: (context) {
          return new Center(
            child: new Column(
              mainAxisSize: MainAxisSize.min,
              children: <Widget>[
                new Text(settings.name),
                new FlatButton(
                  onPressed: () =>
                      Navigator.pushNamed(context, "${settings.name}/next"),
                  child: new Text('Next'),
                ),
                new FlatButton(
                  onPressed: () =>
                      Navigator.pop(context),
                  child: new Text('Back'),
                ),
              ],
            ),
          );
        });
      },
    );
  }

  @override
  Widget build(BuildContext context) {
    return new Scaffold(
      body: new Column(
        children: <Widget>[
          new Expanded(
            child: _getNavigator(context),
          ),
          new Expanded(
            child: _getNavigator(context),
          ),
        ],
      ),
    );
  }
}

void main() {
  runApp(new MaterialApp(
    home: new Home(),
  ));
}

Screenshot

答案 1 :(得分:0)

你可以把first material app's contextsecondary material app;
而在 secondary material app 中,当您需要返回 first material app 时,
您可以使用以下行检查辅助应用程序是否可以弹出:

 Navigator.of(secondaryContext).canPop()

如果为真,则可以继续使用,否则使用first material app's context
像这样:

Navigator.of(parentContext).pop();

否则