Как я могу скопировать документы из одной коллекции в другую только один раз Flutter Firebase - PullRequest
0 голосов
/ 28 апреля 2020

Я хочу получить указанные c данные из подколлекции в Firebase и скопировать их только один раз (без потока) в другую коллекцию. Как я могу исправить код, чтобы заставить это работать? Возможно, мне нужно что-то изменить с помощью getDocuments (), но я не знаю, как заставить это работать. Спасибо за вашу помощь.

  void copy() async {
 await  _firestore
    .collection('users')
    .document(loggedinUser.uid)
    .collection('Dates')
    .document(yesterdayDate)
    .collection(widget.reference)
    .getDocuments().then((QuerySnapshot snapshot) {snapshot.documents.forEach((message) {

      final getitem = message.data['item'];
    final getarchieved = message.data['archived'];
    final getchecked = message.data['checked'];}) {




    if (getchecked == false && widget.reference == 'Todo') {
      _firestore
          .collection('users')
          .document(loggedinUser.uid)
          .collection('Dates')
          .document(selectedDate)
          .collection(widget.reference)
          .add({
        'item': getitem,
        'archived': getarchieved,
        'checked': getchecked
      });
    } else if (widget.reference == 'Goals') {
      _firestore
          .collection('users')
          .document(loggedinUser.uid)
          .collection('Dates')
          .document(selectedDate)
          .collection(widget.reference)
          .add({
        'item': getitem,
        'archived': getarchieved,
        'checked': false
      });
    }



  }
 }

1 Ответ

0 голосов
/ 28 апреля 2020

Хорошо, так что после долгих исследований, проб и ошибок у меня наконец есть решение, которое работает. Я надеюсь, что смогу помочь кому-нибудь, столкнувшемуся с той же проблемой, с этим решением:

void copy() async {
QuerySnapshot snaphsot = await _firestore
    .collection('users')
    .document(loggedinUser.uid)
    .collection('Dates')
    .document(yesterdayDate)
    .collection(widget.reference)
    .getDocuments();

for (var message in snaphsot.documents) {
  final getitem = message.data['item'];
  final getarchieved = message.data['archived'];
  final getchecked = message.data['checked'];

  if (getchecked == false && widget.reference == 'Todo') {
    _firestore
        .collection('users')
        .document(loggedinUser.uid)
        .collection('Dates')
        .document(selectedDate)
        .collection(widget.reference)
        .add({
      'item': getitem,
      'archived': getarchieved,
      'checked': getchecked
    });
  } else if (widget.reference == 'Goals') {
    _firestore
        .collection('users')
        .document(loggedinUser.uid)
        .collection('Dates')
        .document(selectedDate)
        .collection(widget.reference)
        .add({'item': getitem, 'archived': getarchieved, 'checked': false});
  }
 }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...