在Flutter中阅读Firebase数据库数据时出现问题

afdcj2ne  于 2023-01-21  发布在  Flutter
关注(0)|答案(1)|浏览(129)

我做了我认为是正确的更改,但是,现在我得到一个错误,说我不能在这里使用forEach,因为它可能返回null。我不能通过使用'!'来强制它,因为然后我得到另一个错误,说不能,因为方法'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);
    });
  }
bis0qfac

bis0qfac1#

你所命名的datasnapshot实际上是一个databaseEvent,为了清楚起见,应该这样命名。事件有一个快照,快照有一个键和一个值。所以,要获得键,你应该能够使用datasnapshot.snapshot.key。同样,值将是datasnapshot.snapshot.value
您真的应该阅读此文档... 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) {...

相关问题