fetchData method
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'));
}
}