假设我要导航到一个特定的选项卡,例如,导航到“chats”选项卡,该选项卡的视图在chatsoverview()中定义。每个选项卡没有自己的scaffold/material小部件。它直接返回streambuilder,所以navigator.push不能直接工作?
Widget build(BuildContext context) {
return WillPopScope(
onWillPop: () => Future.value(false),
child: new Scaffold(
appBar: AppBar(
leading: Container(),
flexibleSpace: SafeArea(
child: new TabBar(indicatorWeight: 4.0,indicatorColor: Colors.white, controller: controller, tabs: <Tab>[
new Tab(
text: 'Gruppen',
icon: Icon(Icons.group),
),
new Tab(
text: 'Chats',
icon: Icon(Icons.chat_bubble),
),
new Tab(
text: 'Einstellungen',
icon: Icon(Icons.settings),
)
]))),
body: new TabBarView(controller: controller, children: <Widget>[
new first.GroupsOverview(),
new second.ChatsOverview(),
new third.Settings()
])),
);
}
最佳答案
要在选项卡之间切换,不需要导航器。
如您所定义的-TabController
TabController controller;
@override
void initState() {
controller = TabController(length: 3, vsync: this);
super.initState();
}
您只需从任意位置调用-
controller.animateTo
方法like-controller.animateTo(2, curve: ElasticInCurve());
即可转到第三个选项卡,同样也可以转到其他选项卡。更新:
如果为Tabbar视图定义了不同的类,那么需要使用类构造函数传递控制器。
body: new TabBarView(controller: controller, children: <Widget>[
GroupsOverview(controller), // Pass the controller
ChatsOverview(controller), // Pass the controller
Settings(controller) // Pass the controller
])
class GroupsOverview extends StatelessWidget {
TabController controller; // ADD THIS
GroupsOverview(this.controller);
@override
Widget build(BuildContext context) {
return Container(
child: RaisedButton(
onPressed: () {
controller.animateTo(1);
},
child: Text('Goto Chats'),
),
);
}
}
class ChatsOverview extends StatelessWidget {
TabController controller; // ADD THIS
ChatsOverview(this.controller);
@override
Widget build(BuildContext context) {
return Container(
child: RaisedButton(
onPressed: () {
controller.animateTo(2);
},
child: Text('Goto Einstellungen')),
);
}
}
class Settings extends StatelessWidget {
TabController controller; // ADD THIS
@override
Widget build(BuildContext context) {
return Container(
child: RaisedButton(
onPressed: () {
controller.animateTo(0);
},
child: Text('Goto Gruppen')),
);
}
Settings(this.controller);
}
关于flutter - 如何使用navigator.push导航到特定选项卡,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/54765734/