【发布时间】:2020-09-18 17:36:16
【问题描述】:
得到标题中的错误。当然,这是一件很容易检查的事情,但是会发生一些奇怪的行为。我正在创建一个带有 1 个或 2 个选项卡的 TabBarView,具体取决于构造函数中的参数 (numTabs)。现在,即使选项卡的长度明显为 2,Flutter 也会断言 - 控制器长度由该值确定,但 Tabs.dart 中的 widget.children.length 认为它的长度为 1。
然后更奇怪的行为:当 TabController 的长度被硬编码为 1 时,然后两个切换,然后我得到错误 Controller's length property (1) does not match the number of tabs (2) present in TabBar's tabs property。所以现在它知道 TabBar 中有两个选项卡。
编辑:应该注意的是,只有当我将numTabs 作为 2 传入时才会发生这种情况。numTabs = 1 工作正常且符合预期。
任何帮助将不胜感激。这是代码(有状态小部件中的所有内容):
List<Widget> tabs;
List<Widget> tabViews ;
@override
void initState() {
super.initState();
tabs = (widget.numTabs == 1) ? List(1) : List(2) ;
tabViews = (widget.numTabs == 1) ? List(1) : List(2) ;
_tabController = new TabController(vsync: this, length: tabs.length);
}
@override
Widget build(BuildContext context) {
if (widget.numTabs == 1){
tabs[0] = (new Tab(text: "Update"));
tabViews[0] = (_someWidget1);
}else{
tabs = [new Tab(text: "Post 1"), new Tab(text: "Post 2")];
tabViews[0] = (_someWidget1);
tabViews[1] = (_someWidget2);
}
return TabBarView(
controller: _tabController,
children: <Widget>[ Scaffold(
appBar: PreferredSize(
preferredSize:
Size.fromHeight(screenHeight(context, dividedBy: 5)),
child: AppBar(
flexibleSpace: FlexibleSpaceBar(
title: Center(
Text('Title'),
),
),
bottom: TabBar(
controller: _tabController,
tabs: tabs,
),
),
),
body: new TabBarView(
controller: _tabController,
children: tabViews,
)),
],
);
}
【问题讨论】:
-
我也遇到了同样的问题,你找到解决办法了吗?
-
嗨@RanaRanvijaySingh 没有解决上述问题。我最终只是检查了 numTabs 参数,然后如果它是一个选项卡,则构建一个 Scaffold,如果是 2,则构建一个 DefaultTabController。
标签: android flutter dart tabbar