我有一个这样的底部导航栏:
Scaffold navBarPages() {
return Scaffold(
key: _scaffoldKey,
body: PageView(
children: <Widget>[
//Sends current user to pages.
PageOne(),
PageTwo(),
PageThree(),
PageFour(),
PageFive(),
],
controller: pageController,
onPageChanged: onPageChanged,
physics: NeverScrollableScrollPhysics(),
),
bottomNavigationBar: CupertinoTabBar(
currentIndex: pageIndex,
onTap: onTap,
activeColor: Theme.of(context).primaryColor,
items: [
BottomNavigationBarItem()
...
],
),
);
}
在PageFive()上,我正在执行一个按下按钮的操作,我想将屏幕弹出到PageOne()。 Navigator.pop(context)
返回PageFive(),关闭具有按钮的屏幕。
我尝试在主机上使用路由,然后将其推到名为Route的'/ pageOne'。但是然后pageOne不会与BottomNavBar一起出现,而我想关闭的屏幕仍在小部件树中。我想完全弹出它,将用户重定向到第一页。
更新: 在路线工作中使用pushAndRemove:
Navigator.of(context).pushNamedAndRemoveUntil(
'/pageOne', (Route<dynamic> route) => false);
我在路线上遇到的问题是在推送后BottomNavBar无法显示。但是要解决它,我改变了
routes: {'/pageOne': (context) => PageOne()}
至
routes: {'/home': (context) => Home()}
Home拥有BottomNavBar类,因此它可以“重新加载”应用程序,从而将用户重定向到第一页。
答案 0 :(得分:1)
如果您只想导航到'/ pageOne'并删除所有先前的路线,则可以代替Widget build(BuildContext context)
home: DefaultTabController(
length: //your_choices,
child: Builder(builder: (BuildContext context) {
return Scaffold(
bottomNavigationBar: BottomAppBar(
child: new Row(
mainAxisAlignment: MainAxisAlignment.end,
children: <Widget>[
FlatButton(
onPressed: () {
DefaultTabController.of(context).animateTo(DefaultTabController.of(context).index + 1);
},
child: new Text('Next >'),
),
],
),
),
appBar: ...
body: ...
);
}),
)