我做了我认为是正确的更改,然而,现在我收到一个错误,说我不能在这里使用for Each,因为它可能返回空.我不能用‘!’来强迫它.因为然后我得到了另一个错误,关于不能这样做,因为方法‘forEach’没有为类型‘Object’定义.

void loadStudentList(){
    // function that loads all students from firebase database and display them in list view
    FirebaseDatabase.instance.ref("students").once()
        .then((databaseEvent) {
      print("Successfully loaded the data");
      print(databaseEvent);
      print("Key:");
      print(databaseEvent.snapshot.key);
      print("value:");
      print(databaseEvent.snapshot.value);
      print("Iterating the value map");
      var studentTmpList = [];
      databaseEvent.snapshot.value!.forEach((k, v) {
        print(k);
        print(v);
        studentTmpList.add(v);
      });
      print("Final student list");
      print(studentTmpList);
      studentList = studentTmpList;
      setState(() {

      });
    }).catchError((error) {
      print("Failed to load the data");
      print(error);
    });
  }

推荐答案

您正在命名的Datanapshot实际上是一个lobaseEvent,为了清楚起见,实际上应该这样命名.该事件有一个快照,该快照有一个键和一个值.因此,要获得密钥,您应该能够使用datasnapshot.snapshot.key.同样,该值将为datasnapshot.snapshot.value.

你真的应该看看这份doctor .https://firebase.flutter.dev/docs/database/usage/

最新情况:

基于下面的注释,在修改后的代码更改中

databaseEvent.snapshot.value!.forEach((k, v) {...

final snapshotValue = databaseEvent.snapshot.value! as Map<dynamic, dynamic>;     
snapshotValue.forEach((k, v) {...

Flutter相关问答推荐

关闭视频通话,相机仍在运行!(Flutter WebRTC)

ShaderMask上的文本渐变问题

audioQuery不会等待判断存储权限

在setState之后,Ffltter ListView.Builder未更新

确保通过在CheckIfFavoriteMovieEvent((event,emit){...})上注册处理程序误差

在flutter web上渲染多个Youtube视频

DART:如何判断有时可以为空的泛型类型?

Flutter 中的 setState() 内部是如何工作的?

SliverAppbar 呈蓝色

使用 flutter_svg 在 flutter 中的 Canvas 上绘制 SVG 图像

Flutter http 请求获取 null

如何使Flutter 屏幕无法关闭?

更改 flutter listview 中的布局

提供者、存储库和服务之间有什么区别?

如何从sibling ChildWidgetB 触发 ChildWidgetA 中的操作

使用 Riverpod 和 copyWith 方法更新数据类中列表中变量的值

按下 Command+W 时关闭窗口

在 Android 12+ 中,REST API 调用在 flutter 中非常慢,在 WiFi 中需要 10 秒,而在移动数据中不到一秒

如何将变量翻译成其他语言

使用 hydrad_bloc 的预览包