强制 TabController 创建所有选项卡 Flutter

Jul*_*urt 7 flutter flutter-layout

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

插图代码:

//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
            ),
          )
        ],
      ),
    );
  }

}
Run Code Online (Sandbox Code Playgroud)

小智 0

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

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

final _formKey = GlobalKey<FormState>();
Run Code Online (Sandbox Code Playgroud)

我希望构建所有选项卡的原因是使用:

_formKey.currentState.validate()
Run Code Online (Sandbox Code Playgroud)

所以我的解决办法是

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