flutter - 如何修复此错误 : The following assertion was thrown building FutureBuilder<DataSnapshot>(dirty, 状态:_FutureBuilderState<DataSnapshot>#89711):

标签 flutter dart

这是错误:
有问题的小部件是: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 小部件。

最佳答案

builder 为 false 时,您似乎没有从 snapshot.hasData 回调函数返回任何内容。这解释了为什么在从数据库加载数据之前您只会短暂地看到错误。您可以在等待数据从数据库到达时从 CircularProgressIndicator 回调函数返回 builder 小部件。你也可以去掉 // 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();
              }
            },
          ),
        ),
      ),
    );
  }
}

关于flutter - 如何修复此错误 : The following assertion was thrown building FutureBuilder<DataSnapshot>(dirty, 状态:_FutureBuilderState<DataSnapshot>#89711):,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62720990/

相关文章:

flutter - 如何检查和删除flf中所有现有的sqflite数据库?

events - 角 Dart : How do you pass an event from a Child component to a second level parent

flutter - 无酒精鸡尾酒 : type 'Null' is not a subtype of type 'Future<Response>'

generics - Dart,不能调用Generic的方法

android - 此应用程序不能树摇图标字体。 Android 部署的 Flutter 构建错误

dictionary - Flutter - 如何在我 future builder 文本小部件中获得值(value)返回

dart - 我们如何从另一个应用程序启动的应用程序中获得响应?

Flutter ElevatedButton 不继承 ButtonThemeData 形状

flutter - 如何检查 Dart 中 switch case 的异常子类型?

flutter - 如何获取文本跨度的当前偏移量?