Flutter Firestore - 如何从文档字段中的文档引用获取数据?

6
我正在构建一个具有不同问题类型的自学习应用程序。目前,其中一个问题包含一个包含DocumentReferences列表的字段:

enter image description here

在Flutter中,我有如下代码:
Query<Map<String, dynamic>> questionsRef = firestore
.collection('questions')
.where('lesson_id', isEqualTo: lessonId);

await questionsRef.get().then((snapshot) {
  snapshot.docs.forEach((document) {
    var questionTemp;
    switch (document.data()['question_type']) {


      ....



      case 'cards':
        questionTemp = CardsQuestionModel.fromJson(document.data());
        break;


      ....


    }
    questionTemp.id = document.id;
    questions.add(questionTemp);
  });
});

现在,通过“questionTemp”,我可以访问所有字段(lesson_id,options,question_type等),但是当涉及到“cards”字段时,我该如何访问该文档引用中的数据?

有没有办法告诉firestore.instance自动从这些引用获取数据?还是我需要为每个引用进行新的调用?如果是这样,我该如何做?

提前感谢您的支持!

1个回答

6

有没有办法告诉firestore.instance自动获取这些引用的数据?还是我需要为每个引用都进行新的调用?

不,没有任何方法可以自动获取这些文档。你需要为每个数组元素构建相应的DocumentReference并获取文档。

要构建引用,请使用doc()方法。

DocumentReference docRef = FirebaseFirestore.instance.doc("cards/WzU...");

然后在这个DocumentReference上使用get()方法。
docRef
.get()
.then((DocumentSnapshot documentSnapshot) {
  if (documentSnapshot.exists) {
    print('Document exists on the database');
  }
});

具体而言,您可以循环遍历cards数组,并将get()方法返回的所有Futures传递给wait()方法,该方法“等待多个Future完成并收集它们的结果”。有关更多详细信息,请参见此SO答案,还要注意,“返回的Future的值将是按迭代Future提供的顺序产生的所有值的列表。”

非常感谢!我使用Future.wait()解决了这个问题。 - Jeoxs

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接