loadBookingCache function

Future<String?> loadBookingCache(
  1. String listen,
  2. String providerId
)

Implementation

Future<String?> loadBookingCache(String listen, String providerId) async {
  try{
    prepareCache(){
      ordersDataCache = [];
      ordersDataCache.addAll(_ordersDataCache1);
      ordersDataCache.addAll(_ordersDataCache2);
      ordersDataCache.sort((a, b) => b.time.compareTo(a.time));
    }

    User? user = FirebaseAuth.instance.currentUser;

    work(querySnapshot){
      _ordersDataCache1 = [];
      if (querySnapshot.exists){
        if (querySnapshot.data() != null) {
          var _meData = querySnapshot.data()!;
          for (var item in _meData.entries){
            var t = OrderDataCache.fromJson(item.key, item.value);
            if (!t.delete && t.status != "temp") {
              if (listen.isEmpty) { // admin
                _ordersDataCache1.add(t);
              } else {
                if (user != null) { // customer app and provider app
                  if (listen == "customerId" && t.customerId == user.uid)
                    _ordersDataCache1.add(t);
                  if (listen == "providerId" && t.providerId == providerId)
                    _ordersDataCache1.add(t);
                }
              }
            }
          }
        }
        _ordersDataCache1.sort((a, b) => b.time.compareTo(a.time));
      }
    }

    var querySnapshot = await FirebaseFirestore.instance.collection("cache").doc("orders").get();
    work(querySnapshot);

    FirebaseFirestore.instance.collection("cache")
        .doc("orders").snapshots().listen((querySnapshot) {
      work(querySnapshot);
      prepareCache();
      redrawMainWindow();
    }).onError((error, stackTrace) {
      print("loadBookingCache_2 $error");
    });

    //
    // #2
    //
    work2(List<OrderDataCache> t1){
      _ordersDataCache2 = [];
      for (var t in t1) {
        if (!t.delete && t.status != "temp") {
          if (listen.isEmpty) { // admin
            _ordersDataCache2.add(t);
          } else {
            if (user != null) { // customer app and provider app
              if (listen == "customerId" && t.customerId == user.uid)
                _ordersDataCache2.add(t);
              if (listen == "providerId" && t.providerId == providerId)
                _ordersDataCache2.add(t);
            }
          }
        }
      }
    }

    List<OrderDataCache> t1 = await dbGetDocument("cache", "orders2");
    if (t1.isNotEmpty){
      work2(t1);
      dbListenChanges("cache", (List<OrderDataCache> _data){
        work2(_data);
        prepareCache();
        redrawMainWindow();
      }, document: "orders2");

      prepareCache();

    }
  }catch(ex){
    return "loadBookingCache " + ex.toString();
  }

  return null;
}