CupertinoTabBar导航

时间:2018-05-08 16:12:57

标签: flutter

对于第一个标签栏:我在DispayMoreScreen上有一个注销按钮。对于Logout按钮操作,app会正确导航到应用程序的根目录。

Navigator.of(context).pushReplacementNamed('/')

带有工作导航的Tabbar:

@override
  Widget build(BuildContext context) {    
        return new Scaffold(
            bottomNavigationBar: new Material(
                color: Colors.white,
                child: new TabBar(controller: controller, labelColor: Colors.blue[900], tabs: <Tab>[
                  new Tab(icon: new Icon(Icons.local_shipping, color: Colors.blue[900], size: 30.0), text: 'A'),
                  new Tab(icon: new Icon(Icons.insert_drive_file, color: Colors.blue[900], size: 30.0), text: 'B'),
                  new Tab(icon: new Icon(Icons.more_horiz, color: Colors.blue[900], size: 30.0), text: 'C'),
                ])),
            body: new TabBarView(controller: controller, children: <Widget>[
              new ShipmentScreen.ShipmentTab(),
              new InvoiceScreen.InvoiceTab(),
              new DisplayMoreScreen.MoreTab(),
            ])
        );
  }

但是当我实施CupertinoTabBar时,注销应用程序停留在同一个屏幕上。

  @override
  Widget build(BuildContext context) {
    return new CupertinoTabScaffold(
      tabBar: new CupertinoTabBar(
        backgroundColor: Colors.white,
        activeColor: Colors.blue[900],
        items: [
          new BottomNavigationBarItem(
            icon: new Icon(Icons.local_shipping),
            title: new Text("A")
          ),
          new BottomNavigationBarItem(
            icon: new Icon(Icons.insert_drive_file),
            title: new Text("B")
          ),
          new BottomNavigationBarItem(
            icon: new Icon(Icons.more_horiz),
            title: new Text("C")
          )
        ]
      ),
      tabBuilder: (BuildContext context, int index) {
        return new CupertinoTabView(
          builder: (BuildContext context) {
            switch(index) {
              case 0:
                return new ShipmentScreen.ShipmentTab();
              case 1:
                return new InvoiceScreen.InvoiceTab();
              case 2:
                return new DisplayMoreScreen.MoreTab();
            }
          },
        );
      }

2 个答案:

答案 0 :(得分:1)

点击选项卡时必须设置setState():

“此[StatelessWidget]不存储活动选项卡本身。您必须收听[onTap]回调,并使用新的[currentIndex]调用setState,以使新选择反映出来。”

我还认为,构建器中的“开关(索引)”应该改为“ currentIndex”变量。

答案 1 :(得分:0)

我认为您需要一个globalKey才能使其正常工作。

查看此enter image description here