Flutter 如何修复此错误:生成FutureBuilder时抛出以下断言<;DataSnapshot>;(肮脏,状态:_FutureBuilderState<;DataSnapshot>;#89711):

Flutter 如何修复此错误:生成FutureBuilder时抛出以下断言<;DataSnapshot>;(肮脏,状态:_FutureBuilderState<;DataSnapshot>;#89711):,flutter,dart,Flutter,Dart,这就是错误: 有问题的小部件是:FutureBuilder 构建函数不能返回null。 要返回导致建筑小部件填满可用空间的空白空间,请返回“Container()”。要返回占用空间尽可能小的空白空间,请返回“容器(宽度:0.0,高度:0.0)”。 此函数用于获取Firebase实时数据: Future<void> getCategoriesName() async { await FirebaseDatabase.instance.reference().child

这就是错误:

有问题的小部件是:FutureBuilder 构建函数不能返回null。 要返回导致建筑小部件填满可用空间的空白空间,请返回“Container()”。要返回占用空间尽可能小的空白空间,请返回“容器(宽度:0.0,高度: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);
      });

    });
  }


在扩展的I've ListView.builder中,上面的错误仅在加载数据时抛出几秒钟,并在屏幕上显示项目。我在FutureBuiler的容器顶部有一个堆栈小部件。

snapshot.hasData
为false时,您似乎没有从
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();
              }
            },
          ),
        ),
      ),
    );
  }
}
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();
              }
            },
          ),
        ),
      ),
    );
  }
}