fetchData method
Implementation
Future<void> fetchData() async {
// fetchFromClientFirebase();
try {
emit(ApiLoadingState());
if (Instadiv.getInstance().storageOption ==
StorageOption.clientFirebase) {
FirebaseApp app = Instadiv.getInstance().firebaseApp;
FirebaseFirestore firestore = FirebaseFirestore.instanceFor(app: app);
// data = snapshot.docs.map((doc) => doc.data()).toList();
List<Map<String, dynamic>> data = [];
DocumentSnapshot<Map<String, dynamic>> snapshotProject = await firestore
.collection(instaCollection)
.doc(Instadiv.getInstance().project)
.get();
if (snapshotProject.exists) {
int updatedAt = snapshotProject.get('updated_at');
bool isTimestampUpdated = await ViewPref.getInstance()
.isTimestampUpdated('updated_at', updatedAt);
if (isTimestampUpdated == false) {
List<Map<String, dynamic>> data =
await ViewPref.getInstance().loadData();
if(data.isNotEmpty ){
emit(ApiLoadedState(data));
return;
}
}
} else {
emit(ApiLoadedState(data));
return;
}
final QuerySnapshot<Map<String, dynamic>> snapshot = await firestore
.collection(instaCollection)
.doc(Instadiv.getInstance().project)
.collection('views')
.get();
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);
}
ViewPref.getInstance().saveData(data);
emit(ApiLoadedState(data));
} else {
if (Instadiv.getInstance().apiKey == null ||
Instadiv.getInstance().project == null) {
emit(ApiErrorState('Api key and project id not set'));
return;
}
var url = Uri.parse(
'${ApiConstants.baseUrl}${Instadiv.getInstance().apiKey!}/project/${Instadiv.getInstance().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'));
}
}