首页 > 解决方案 > 我想将实时数据库转换为云 Firestore

问题描述

下面是我需要转换的代码

DatabaseReference driversRef =
     FirebaseDatabase.instance.reference().child("drivers");
driversRef
        .child(currentfirebaseUser!.uid)
        .once()
        .then((DataSnapshot dataSnapShot) {
      if (dataSnapShot.value != null) {
        driversInformation = Drivers.fromSnapshot(dataSnapShot);
      }
    })

我已经建立了云存储,但我似乎无法编写代码来将我必须的内容转换为 Firestore。

这是我的尝试:

driversRef
        .doc(currentfirebaseUser!.uid)
        .collection('earnings')
        .get()
        .then((value) {
      if (value != null) {
        driversInformation = value.toString();
      }
    }); 

下面是数据库结构的图片 在此处输入图像描述

标签: firebasefluttergoogle-cloud-firestore

解决方案


我认为您使用collection('earning)Doc是错误的。因为您可以像表名一样在开始和一次中使用它。

你可以试试这个

final databaseReference = FirebaseFirestore.instance;
                    databaseReference.collection('drivers').doc(currentfirebaseUser!.uid).snapshots().listen((event) { 
//If you want to listen like streaming 
            
evenyt.data(); //<- access data in <String,dynamic>
    
}
        
            
// If you want to list only once    
var response = await databaseReference.collection('drivers').doc(currentfirebaseUser!.uid).get();
response.data()?['earning'] ?? 0 // access specific key value

在这里,我向您展示与您类似的示例:我正在更新通知徽章值,当它发生变化时。这是我的云火库结构

//If you want to listen only once
Future<int> getBadgeCount({required String uid}) async { 
  var response = await databaseReference.collection('Badges').doc(uid).get();
  return (response.data() != null) ? (response.data()?['BadgeCount'] ?? 0) : 0;
}
            
//If you want to listen like streaming       
databaseReference.collection('Badges').where(uid).limit(1).snapshots().listen((response) {
    badgeCount = response.docs.isNotEmpty ? (response.docs.first.data()['BadgeCount'] ?? 0) : 0;

    printLog(message: "BadgeCount: ", variable: badgeCount);
  });

}


推荐阅读