【问题标题】:TabBarView: Controller's length property (2) does not match the number of tabs (1) present in TabBar's tabs propertyTabBarView:控制器的长度属性 (2) 与 TabBar 的选项卡属性中存在的选项卡数 (1) 不匹配
【发布时间】: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


【解决方案1】:

这是一个简单的问题,如果有条件,你可以解决它 如果你不能解决这个问题,那么你可以上传你的完整文件,我会尽力解决

if(items.length >= 3){
  return getBody(items);
}
else{
  return Container();
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-07-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-08-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多