synchronizeDocuments static method

dynamic synchronizeDocuments({
  1. required String collectionPath,
  2. required PumaCondition primaryCondition,
  3. void onCompleted(
    1. List<String>
    )?,
  4. List<PumaCondition>? conditions,
})

Implementation

static synchronizeDocuments({
  required String collectionPath,
  required PumaCondition primaryCondition,
  void Function(List<String>)? onCompleted,
  List<PumaCondition>? conditions,
}) {
  if (FirebaseAuth.instance.currentUser == null) return;
  bool foundDocuments = false;

  CollectionReference<Map<String, dynamic>> collection =
      FirebaseFirestore.instance.collection(collectionPath);

  Query<Map<String, dynamic>> query =
      queryCollection(collection, primaryCondition);

  if (conditions != null) {
    query = queryConditions(query, conditions);
  }

  var snapshot = query.get();

  snapshot.catchError((e) {
    debugPrint("Something went wrong");
    debugPrint(e.toString());
  });

  snapshot.then((value) {
    List<String> documents = [];
    foundDocuments = true;

    for (var doc in value.docs) {
      documents.add(jsonEncode(doc.data()));
    }

    if (onCompleted != null) {
      onCompleted(documents);
    }
  });

  snapshot.whenComplete(() {
    if (!foundDocuments) {
      debugPrint("No documents found in Firestore");
      if (onCompleted != null) {
        onCompleted([]);
      }
    }
  });
}