Проблема со списком подколлекций из firestore - PullRequest
0 голосов
/ 07 мая 2020

Привет, я новичок в трепетании, и у меня проблемы с получением данных в мою модель из пожарного хранилища, я объясню: я пытаюсь сначала получить основную коллекцию моей базы данных под названием соседи, а затем после того, как я получил все документы из каждому соседу я пытаюсь получить идентификаторы документов каждого из них, а затем получить их платежи, которые являются вспомогательной коллекцией для каждого соседа, после этого я пытаюсь передать данные в модель и создать объекты списка этой модели для каждого соседа.

Проблема в том, что я пытаюсь вернуть свой список моделей, но могу добавить в него только соседей, платежи - пустой список, я подписываюсь на платежи, я прикреплю код:

  Future<List<NeighborDataModel>> getNeighborData() async {
    neighborhoodData = [];

    neighbors = await _firestore
        .collection('neighbors')
        .getDocuments()
        .then((val) => val.documents);

    for (int i = 0; i < neighbors.length; i++) {
      _firestore
          .collection('neighbors')
          .document(neighbors[i].documentID.toString())
          .collection('payments')
          .snapshots()
          .listen(createListOfPayments);

      neighborhoodData.add(NeighborDataModel.fromFirestore(neighbors[i], payments));
    }

    print(neighborhoodData.length);
    return neighborhoodData;
  }

  Future createListOfPayments(QuerySnapshot snapshot) async {
    payments = [];
    var doc = snapshot.documents;
    for (var Doc in doc) {
      payments.add(Doc);
    }
    return payments;
  }

Вопрос: есть ли возможность вернуть список платежей из функции моментального снимка createListOfPayments, или есть другой лучший способ заполнить мой список моделей?.

Вот моя модель:

import 'package:cloud_firestore/cloud_firestore.dart';

class NeighborDataModel {
  String name;
  String lastName;
  String streetName;
  String streetNumber;
  String phone;
  String email;
  String entryCode;
  List payments;

  NeighborDataModel({
    this.name,
    this.lastName,
    this.streetName,
    this.streetNumber,
    this.phone,
    this.email,
    this.entryCode,
    this.payments,
  });

  factory NeighborDataModel.fromFirestore(
      DocumentSnapshot neighbor, List<DocumentSnapshot> payments) {

    Map neighborData = neighbor.data;

    List paymentData = [];
    for(var payment in payments){
      paymentData.add(payment.data);    }


    return NeighborDataModel(
      name: neighborData['name'],
      lastName: neighborData['last_name'],
      streetName: neighborData['street'],
      streetNumber: neighborData['house_number'],
      phone: neighborData['phone'],
      email: neighborData['email'],
      entryCode: neighborData['entry_code'],
      payments: paymentData
    );
  }
}

Взял пример из: https://medium.com/@borsezf2 / sub-collections-list-from-firestore-d6c6e029bed3 * 1 013 *

Заранее большое спасибо!

...