我有一个使用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
),
)
],
),
);
}
}
答案 0 :(得分:0)
我遇到了类似的问题,我正在使用带有表单的选项卡,我想验证所有这些选项卡,我的解决方案是以编程方式切换到第二个选项卡,不访问带有表单的选项卡是没有意义的这需要验证。
因此给每个表单一个全局键:
final _formKey = GlobalKey<FormState>();
我希望构建所有标签的原因是:
_formKey.currentState.validate()
所以我的解决方法是
if (_formKey.currentState == null) { //The tab was never visited, force it
_tabController.animateTo(1);
return;
}