【问题标题】:How to Fix this error: The following assertion was thrown building FutureBuilder<DataSnapshot>(dirty, state: _FutureBuilderState<DataSnapshot>#89711):如何修复此错误:在构建 FutureBuilder<DataSnapshot>(dirty, state: _FutureBuilderState<DataSnapshot>#89711) 时引发了以下断言:
【发布时间】:2020-10-24 12:10:57
【问题描述】:

这是错误:

有问题的小部件是:FutureBuilder 构建函数绝不能返回 null。 要返回导致建筑小部件填满可用空间的空白空间,请返回“Container()”。要返回占用尽可能少空间的空白空间,请返回“Container(width: 0.0, height: 0.0)”。

这是获取 Firebase 实时数据的函数:

Future<void> getCategoriesName() async {
   
    await  FirebaseDatabase.instance.reference().child('Categories').once()
        .then((DataSnapshot dataSnapshot){
      var key  = dataSnapshot.value.keys;
      for(var i in key)
      {
        CategoryItems categoryItems =  new CategoryItems(
            dataSnapshot.value[i]['CategoryName'],
            dataSnapshot.value[i]['Counter']
            

        );
        categoryItemList.add(categoryItems);
      }
      setState(() {
        print(categoryItemList.length);
      });

    });
  }

这是我的 Future Builder 函数:

 Container(
                        margin: EdgeInsets.only(bottom: 50,top: 100),
                        child: FutureBuilder(
                          future: FirebaseDatabase.instance.reference().child('Categories').child(_userPin).once(),
                          // ignore: missing_return
                          builder: (context, snapshot) {
                            if(snapshot.hasData){
                               if (snapshot.data!=null) {
                                return Expanded();
                               }else{
                                 return Loader();
                               }
                          }
                          }
                        ),
                      ),

在 Expanded 内部,我有 ListView.builder,仅当我的数据被加载时,上面的错误才会抛出几秒钟,它会在屏幕上显示项目。我在 FutureBuiler 的容器顶部有 Stack 小部件。

【问题讨论】:

    标签: flutter dart


    【解决方案1】:

    snapshot.hasData 为假时,您似乎没有从builder 回调函数返回任何内容。这解释了为什么在从数据库加载数据之前您只会短暂看到错误。在等待数据从数据库到达时,您可以从builder 回调函数返回一个CircularProgressIndicator 小部件。您也可以去掉// ignore: missing_return 注释,因为builder 回调函数应该总是返回一个小部件。

    void main() {
      runApp(MyApp());
    }
    
    class MyApp extends StatelessWidget {
      @override
      Widget build(BuildContext context) {
        return MaterialApp(
          home: Scaffold(
            body: Container(
              margin: EdgeInsets.only(bottom: 50, top: 100),
              child: FutureBuilder(
                future: FirebaseDatabase.instance.reference().child('Categories').child(_userPin).once(),
                builder: (context, snapshot) {
                  if (snapshot.hasData) {
                    if (snapshot.data != null) {
                      return Expanded();
                    } else {
                      return Loader();
                    }
                  } else {
                    return CircularProgressIndicator();
                  }
                },
              ),
            ),
          ),
        );
      }
    }
    

    【讨论】:

      猜你喜欢
      • 2019-07-02
      • 1970-01-01
      • 2021-07-03
      • 2021-09-17
      • 1970-01-01
      • 2021-09-08
      • 1970-01-01
      • 1970-01-01
      • 2020-12-14
      相关资源
      最近更新 更多