【问题标题】:How to acces tabbarcontroller from another Page?如何从另一个页面访问标签栏控制器?
【发布时间】:2020-01-10 11:28:00
【问题描述】:

我想从另一个页面访问 tabbarview。这样我就可以通过单击按钮立即访问第三个 tabbarview。无需进入第一页。这怎么可能?

IconButton(
  onPressed: () {
    Navigator.push(
      context,
      MaterialPageRoute(
          builder: (context) => firstpage()), // here i want immediately go to third page
    );
  },
);

当我将第三页作为 MaterialPageRout 插入时,我的应用和标签栏丢失了。

class Home extends StatefulWidget {
Home({Key key, this.title}) : super(key: key);



final int title;
@override
State<StatefulWidget> createState() {
return HomeExtended();
 }

}

class HomeExtended extends State<Home> with TickerProviderStateMixin {

//here I want to acces the title from home 
// when I add super(key: key) it marks the key
// I think its because it is not a stateful widget

【问题讨论】:

    标签: flutter navigation tabbar


    【解决方案1】:

    假设我们有以下应用:

    import 'package:flutter/material.dart';
    
    void main() {
      runApp(TabBarDemo());
    }
    
    class TabBarDemo extends StatelessWidget {
      @override
      Widget build(BuildContext context) {
        return MaterialApp(
          home: DefaultTabController(
            length: 3,
            child: Scaffold(
              appBar: AppBar(
                bottom: TabBar(
                  tabs: [
                    Tab(icon: Icon(Icons.directions_car)),
                    Tab(icon: Icon(Icons.directions_transit)),
                    Tab(icon: Icon(Icons.directions_bike)),
                  ],
                ),
                title: Text('Tabs Demo'),
              ),
              body: TabBarView(
                children: [
                  Icon(Icons.directions_car),
                  Icon(Icons.directions_transit),
                  Icon(Icons.directions_bike),
                ],
              ),
            ),
          ),
        );
      }
    }
    

    将以下内容添加到TabBarDemo

    final int initialIndex;
    TabBarDemo({Key key, this.initialIndex}) : super(key: key);
    

    DefaultTabController 编辑为:

    //...
    DefaultTabController(
         length: 3,
         initialIndex: initialIndex??0,
    //...
    

    那么当路由到 TabBarDemo 类时,你可以这样称呼它:

    Navigator.push(
      context,
      MaterialPageRoute(
          builder: (context) => TabBarDemo(initialIndex:2)),
    );
    

    编辑: 如果您使用StatefulWidget 并且它的状态是另一个扩展State 的类,则在状态类中您可以通过关键字widget 访问有状态小部件。

    initialIndex: widget.initialIndex??0,
    

    【讨论】:

    • 几乎可以工作了。谢谢。我可以从有状态小部件访问值。问题是我有一个从 Stateful Widget 扩展 State 的类,但我不知道如何从那里获取值。这是控制器所在的类。我编辑了上面的代码。
    • 您可以使用关键字widget 访问状态内的有状态小部件。我编辑了答案。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-01-06
    • 1970-01-01
    • 1970-01-01
    • 2019-10-03
    • 2012-03-30
    相关资源
    最近更新 更多