我目前在我的flutter应用程序中有一个MaterialApp
,这使Navigator
的使用非常简单,这很棒。但是,我现在正试图弄清楚如何为特定的视图/小部件创建更多的导航器。例如,我有一个自定义标签栏,其中包含另一个小部件/视图。我现在希望该小部件/视图拥有自己的导航堆栈。因此我的目标是将标签栏保持在顶部,同时从我的小部件/视图中导航到其他页面
这个问题几乎就是这样:Permanent view with navigation bar in Flutter但在该代码中,还没有MaterialApp
。嵌套MaterialApp
会给出时髦的结果,我不相信那会是一个解决方案
有什么想法吗?
答案 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(),
));
}
答案 1 :(得分:0)
你可以把first material app's context
给secondary material app
;
而在 secondary material app
中,当您需要返回 first material app
时,
您可以使用以下行检查辅助应用程序是否可以弹出:
Navigator.of(secondaryContext).canPop()
如果为真,则可以继续使用,否则使用first material app's context
,
像这样:
Navigator.of(parentContext).pop();
否则