Controller的length属性与TabBar的tabs属性中存在的选项卡数量不匹配

问题描述 投票:0回答:1

我正在实现TabBar,但收到错误,如上所述。我知道发生这种情况的原因,但不知道如何解决此问题。

我有一个旨在从Firebase中提取数据的异步功能,该数据填充了列表。功能说明如下。该函数提取的数据用于将长度传递给TabController。

从Firebase调用数据的功能:

Future functionName async {

await function actions...
  List example = ['item1', 'item2', 'item3', 'item4'];
} 

此功能在Future Builder中使用,一旦完成函数执行,该函数将返回要显示的小部件。

Future Builder的Future在类的initState()中初始化。 init()状态如下:

  @override
  void initState() {
    super.initState();

    _future = functionName();

    tabController = TabController(length: example.length, vsync: this, initialIndex: 0);

    tabController.addListener(_setActiveTabIndex);
 }

现在,如上所述,我得到了错误。显而易见,为什么!由于该函数是异步函数,并且内置在Future Builder中,因此列表“ example”最初为空。并且TabController的长度为0。但是随着列表的填充,长度增加,但TabController的长度不变。

我尝试使用:

    @override
    void initState() {
      super.initState();

    _future = functionName();

    setState(() {
       tabController = TabController(length : example. length, vsync : this, initialIndex : 0)
  } 
) 

但是这也不起作用。知道这个问题很烦人,但无法解决它。在此方面的任何帮助将不胜感激。

flutter tabs init tabview
1个回答
0
投票

您已经知道问题的原因。

洞的想法有点倒退。

[在不知道需要多少个选项卡之前,您正在尝试构建TabBar


您可以

  • 执行FutureBuilder,然后使用接收到的数据构建TabBar

或者您可以

  • 进入该屏幕之前获取数据,因此已经有数据。

我希望这能使您走上正轨

© www.soinside.com 2019 - 2024. All rights reserved.