首页 > 解决方案 > 如何在 Flutter 中从 Firebase 实时数据库返回一个 int

问题描述

int GetInitial(String roomID) {
    final dbRef =
        FirebaseDatabase.instance.reference().child(roomID).child("initial");
    db.child(roomID).child('initial').once().then((DataSnapshot snapshot) {
      print('Data : ${snapshot.value}');
      return int.parse(snapshot.value);
    });
    return 0;
  }

我试图在我的 Firebase 实时数据库 JSON 树中返回一个孩子的值,但它一直给我零。我无法使用 once() 直接访问该值,因为返回值是错误的。但是,我从将值打印到控制台得到的输出是正确的,但是它不返回 int.parse(snapshot.value)。

标签: firebaseflutterdartfirebase-realtime-database

解决方案


once()是异步的,该then()方法将注册回调,以便在此未来完成时调用。因此,在您的代码中,将始终返回 0,因为它是在未来完成之前执行的。

要解决这个问题,您可以使用async/await

Future<int> GetInitial(String roomID) async {
    final dbRef = FirebaseDatabase.instance.reference().child(roomID).child("initial");
    final snapshot = await db.child(roomID).child('initial').once();
    print('Data : ${snapshot.value}');
    return int.parse(snapshot.value);
  }

推荐阅读