fetchData method

Future<void> fetchData()

Implementation

Future<void> fetchData() async {
  // fetchFromClientFirebase();
  try {
    emit(ApiLoadingState());

    if (Instadiv.getInstance().storageOption ==
        StorageOption.clientFirebase) {
      FirebaseApp app = Instadiv.getInstance().firebaseApp;
      // if (app == null) {
      //   emit(ApiErrorState(
      //       'Firebase not initialised, pls initialise it before Instadiv'));
      //   return;
      // }

      FirebaseFirestore firestore = FirebaseFirestore.instanceFor(app: app);
      final QuerySnapshot<Map<String, dynamic>> snapshot = await firestore
          .collection(instaCollection)
          .doc(Cred.project)
          .collection('views')
          .get();

      List<Map<String, dynamic>> data = [];
      // data = snapshot.docs.map((doc) => doc.data()).toList();

      for (var view in snapshot.docs) {
        var viewJson = view.data();
        viewJson['id'] = view.id;
        data.add(viewJson);

        int updatedAt = viewJson['updated_at']??0;
        String key = view.id + updatedAt.toString();
        ViewPref.getInstance().createLogMap(key);
      }
      emit(ApiLoadedState(data));
    } else {
      if (Cred.apiKey == null || Cred.project == null) {
        emit(ApiErrorState('Api key and project id not set'));
        return;
      }

      var url = Uri.parse(
          '${ApiConstants.baseUrl}${Cred.apiKey!}/project/${Cred.project!}');
      final response = await http.get(url);

      if (response.statusCode == 200 || response.statusCode == 304) {
        List<dynamic> parsedResponse = json.decode(response.body);
        List<Map<String, dynamic>> data = [];
        for (var item in parsedResponse) {
          if (item is Map<String, dynamic>) {
            data.add(item);
          }
        }
        emit(ApiLoadedState(data));
      } else {
        emit(ApiErrorState('Failed to load data'));
      }
    }
  } catch (e) {
    emit(ApiErrorState('An error occurred: $e'));
  }
}