代码之家  ›  专栏  ›  技术社区  ›  user1961

当子窗口项等待父窗口项的设置状态完成时,如何在两个有状态窗口项之间使用FutureBuilder?

  •  0
  • user1961  · 技术社区  · 6 年前

    我有一个使用TabBar的小部件。父小部件发出一个http调用,需要在绘制TabBar小部件之前完成(它们使用数据)。如何强制TabBarView小部件等待父http调用完成,并设置状态变量,然后在TabBarView小部件中使用该变量。似乎解决方案是对所有的TabBar小部件使用FutureBuilder,但是这些小部件如何知道等待父部件完成呢?这些小部件等待父部件的数据。

    父窗口小部件-进行http调用,设置状态变量x TabBarView widgets,wait for x。由于在设置x之前调用TB1,因此引发了一个错误,除非我抛出一些伪数据。

    父小部件

      void initState() {
        x = await _getdata();
        setState(() => this.x = x);
    
      }
    

    ...

            TabBarView(
                controller: _tabController,
                children: [
                  new TB1(x),
                  new TB2(x),
                  new TB3(x),
                ]
            )
    
    0 回复  |  直到 6 年前
        1
  •  2
  •   Martyns Harshit    6 年前

    您可以有条件地构建小部件

    DataType x = null;
    
    void initState() {
        _getdata().then((_x) {
            if (mounted){ // Just to be sure is safe to call setState, since _getdata is asynchronous
                setState(() => x = _x);
            }
        });    
    }
    
    Widget build(BuildContext context){
        // Loading
        if (x == null){
           return CircularProgressIndicator();
        }else{
            return TabBarView(...);
        }
    }