如何从文档 firestore flutter 中获取子集合

How to get a subcollection from a document firestore flutter

我正在尝试从另一个 文档 中的 子集合 获取文档,当我尝试获取文档并填写时包含 “文档数据” 的本地列表未填满,谁能告诉我我在这里做错了什么?

我尝试获取子集合时的方法:

  static Stream<List<CheckInOutModel>> employeeCheckInOutStream() {
    return firebaseFirestore
        .collection('employees')
        .doc(auth.currentUser!.uid)
        .collection('employeeList')
        .snapshots()
        .asyncMap((QuerySnapshot querySnapshot) {
      final List<CheckInOutModel> employeesCheckInOutList = [];
      for (final element in querySnapshot.docs) {
        firebaseFirestore
            .collection('employees')
            .doc(auth.currentUser!.uid)
            .collection('employeeList')
            .doc(element.id)
            .collection('checkInOutList')
            .snapshots()
            .asyncMap((QuerySnapshot query) {
          for (final element in query.docs) {
            final employeeCheckInOutModel =
                CheckInOutModel.fromDocumentSnapshot(
              documentSnapshot: element,
            );
            employeesCheckInOutList.add(employeeCheckInOutModel);
          }
        });
      }
      return employeesCheckInOutList;
    });
  }

获取子集合所在文档的字段时我的方法:

  static Stream<List<EmployeeModel>> employeeStream() {
    return firebaseFirestore
        .collection('employees')
        .doc(auth.currentUser!.uid)
        .collection('employeeList')
        .snapshots()
        .map((QuerySnapshot query) {
      final List<EmployeeModel> employees = [];
      for (final employee in query.docs) {
        final employeeModel =
            EmployeeModel.fromDocumentSnapshot(documentSnapshot: employee);
        employees.add(employeeModel);
      }
      return employees;
    });
  }

所以我弄清楚我在这里做错了什么,当我只在调用回调时才需要它时,我尝试调用它的流,所以我相应地更改了逻辑并使用 Future 而不是 Stream

我更新的代码:

  static Future<List<CheckInOutModel>> employeeCheckInOutStream({
    required String id,
  }) async {
    final List<CheckInOutModel> employeesCheckInOutList = [];
    final query = await firebaseFirestore
        .collection('employees')
        .doc(auth.currentUser!.uid)
        .collection('employeeList')
        .doc(id)
        .collection('checkInOutList')
        .get();

    for (final employee in query.docs) {
      final employeeCheckInOutModel = CheckInOutModel.fromDocumentSnapshot(
        documentSnapshot: employee,
      );
      employeesCheckInOutList.add(employeeCheckInOutModel);
    }

    return employeesCheckInOutList;
  }