如何仅将文档从一个集合复制到另一个集合一次 Flutter Firebase

Fel*_*lix 0 firebase flutter google-cloud-firestore

我想从 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
      });
    }



  }
 }
Run Code Online (Sandbox Code Playgroud)

Fel*_*lix 5

好吧,经过大量的研究和反复试验,我终于找到了一个可行的解决方案。我希望我可以帮助遇到同样问题的人使用此解决方案:

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});
  }
 }
}
Run Code Online (Sandbox Code Playgroud)