【问题标题】:Flutter entering to sub-sub collection in firebaseFlutter 进入 firebase 的 sub-sub 集合
【发布时间】:2023-02-14 01:14:36
【问题描述】:

我的嵌套集合如下所示:

User--> drugs--> drugsTime

我想更新子子集合 (drugsTime) 中文档中的数据 但是我不知道药物文件 ID 和药物时间文件 ID 所以我做了以下事情:

 ConfirmDrugTaken(DateTime d) async {
    final User? user = FirebaseAuth.instance.currentUser;
    final _uid = user?.uid;
    var drugID="";
    // Get the user's sub-collections in Firestore
    final QuerySnapshot<Map<String, dynamic>> querySnapshot =
    await FirebaseFirestore.instance
        .collection("users")
        .doc(_uid)
        .collection('drug').where("drugName", isEqualTo: widget.title)
        .get();
    querySnapshot.docs.forEach((element) async {
      drugID=element.id;
    });

    final QuerySnapshot<Map<String, dynamic>> querySnapshot2 =FirebaseFirestore.instance
        .collection("users")
        .doc(_uid)
        .collection("drug")
        .doc(drugID).collection("drugDates").where('time',isEqualTo: d).get() as QuerySnapshot<Map<String, dynamic>>;
    querySnapshot2.docs.forEach((element) async {
      FirebaseFirestore.instance
          .collection("users")
          .doc(_uid)
          .collection("drug")
          .doc(drugID).collection("drugDates").doc(element.id).update( {'isTaken': true});

    });


  } 

但出现此错误:

[ERROR:flutter/runtime/dart_vm_initializer.cc(41)] Unhandled Exception: type 'Future<QuerySnapshot<Map<String, dynamic>>>' is not a subtype of type 'QuerySnapshot<Map<String, dynamic>>' in type cast
E/flutter (17976): #0      _drugSetupState.ConfirmDrugTaken (package:taafi_application_v1/pages/drug_setup.dart:215:79)
E/flutter (17976): <asynchronous suspension>
E/flutter (17976): #1      _drugSetupState.setAlarm.<anonymous closure>.<anonymous closure>.<anonymous closure>.<anonymous closure> (package:taafi_application_v1/pages/drug_setup.dart:112:20)
E/flutter (17976): <asynchronous suspension>

是否有另一种方法可以在不知道 id 的情况下进入子子集合,或者我该如何解决这个错误?

请帮忙

【问题讨论】:

    标签: flutter firebase dart google-cloud-firestore collections


    【解决方案1】:

    您忘记使用await 来调用异步方法,querySnapshot2 的代码应如下所示

    final QuerySnapshot<Map<String, dynamic>> querySnapshot2 = (await FirebaseFirestore.instance
            .collection("users")
            .doc(_uid)
            .collection("drug")
            .doc(drugID).collection("drugDates").where('time',isEqualTo: d).get()) as QuerySnapshot<Map<String, dynamic>>;
    

    【讨论】:

      【解决方案2】:
           ConfirmDrugTaken(DateTime d) async {
              final User? user = FirebaseAuth.instance.currentUser;
              final _uid = user?.uid;
              var drugID="";
              // Get the user's sub-collections in Firestore
              final QuerySnapshot<Map<String, dynamic>> querySnapshot =
              await FirebaseFirestore.instance
                  .collection("users")
                  .doc(_uid)
                  .collection('drug').where("drugName", isEqualTo: widget.title)
                  .get();
              querySnapshot.docs.forEach((element) async {
                drugID=element.id;
              });
      
        // await firebase query and get() should already return object in QuerySnapshot<Map<String, dynamic>>;
              final QuerySnapshot<Map<String, dynamic>> querySnapshot2 = await FirebaseFirestore.instance
                  .collection("users")
                  .doc(_uid)
                  .collection("drug")
                  .doc(drugID).collection("drugDates").where('time',isEqualTo: d).get();
      
      
      
              querySnapshot2.docs.forEach((element) async {
                FirebaseFirestore.instance
                    .collection("users")
                    .doc(_uid)
                    .collection("drug")
                    .doc(drugID).collection("drugDates").doc(element.id).update( {'isTaken': true});
          
              });
          
          
            } 
      

      【讨论】:

        猜你喜欢
        • 2021-11-01
        • 2018-01-31
        • 2020-03-27
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-10-15
        • 1970-01-01
        相关资源
        最近更新 更多