假设我要导航到一个特定的选项卡,例如,导航到“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/

10-11 22:28
查看更多