强制TabController创建所有标签页

时间:2018-08-30 23:32:42

标签: flutter flutter-layout

我有一个使用TabBar和TabController的带有两个选项卡的默认页面。一切正常,除了进入页面时,仅当我单击以更改为第二个选项卡时,才调用第二个选项卡的build方法。问题是当我进入页面时,我希望两个选项卡都已经创建(也就是执行了它们的构建方法)。有什么想法吗?

插图代码:

//This widget is used inside a Scaffold
class TabsPage extends StatefulWidget {

  @override
  State<StatefulWidget> createState() => new TabsPageState();

}

class TabsPageState extends State<TabsPage> with TickerProviderStateMixin {

  List<Tab> _tabs;
  List<Widget> _pages;
  TabController _controller;

  @override
  void initState() {
    super.initState();
    _tabs = [
      new Tab(text: 'TabOne'),
      new Tab(text: 'TabTwo')
    ];
    _pages = [
      //Just normal stateful widgets
      new TabOne(),
      new TabTwo()
    ];
    _controller = new TabController(length: _tabs.length, vsync: this);
  }

  @override
  Widget build(BuildContext context) {
    return new Padding(
      padding: EdgeInsets.all(10.0),
      child: new Column(
        children: <Widget>[
          new TabBar(
            controller: _controller,
            tabs: _tabs
          ),
          new SizedBox.fromSize(
            size: const Size.fromHeight(540.0),
            child: new TabBarView(
                controller: _controller,
                children: _pages
            ),
          )
        ],
      ),
    );
  }

}

1 个答案:

答案 0 :(得分:0)

我遇到了类似的问题,我正在使用带有表单的选项卡,我想验证所有这些选项卡,我的解决方案是以编程方式切换到第二个选项卡,不访问带有表单的选项卡是没有意义的这需要验证。

因此给每个表单一个全局键:

final _formKey = GlobalKey<FormState>();

我希望构建所有标签的原因是:

_formKey.currentState.validate()

所以我的解决方法是

if (_formKey.currentState == null) { //The tab was never visited, force it
  _tabController.animateTo(1);
  return;
}