import 'package:flutter_riverpod/flutter_riverpod.dart'; import 'package:apidash/models/models.dart'; import '../services/services.dart' show hiveHandler, HiveHandler; import '../utils/history_utils.dart'; final selectedHistoryIdStateProvider = StateProvider((ref) => null); final selectedRequestGroupIdStateProvider = StateProvider((ref) { final selectedHistoryId = ref.watch(selectedHistoryIdStateProvider); final historyMetaState = ref.read(historyMetaStateNotifier); if (selectedHistoryId == null) { return null; } return getHistoryRequestKey(historyMetaState![selectedHistoryId]!); }); final selectedHistoryRequestModelProvider = StateProvider((ref) => null); final historySequenceProvider = StateProvider>?>((ref) { final historyMetas = ref.watch(historyMetaStateNotifier); return getTemporalGroups(historyMetas?.values.toList()); }); final StateNotifierProvider?> historyMetaStateNotifier = StateNotifierProvider((ref) => HistoryMetaStateNotifier(ref, hiveHandler)); class HistoryMetaStateNotifier extends StateNotifier?> { HistoryMetaStateNotifier(this.ref, this.hiveHandler) : super(null) { var status = loadHistoryMetas(); Future.microtask(() { if (status) { final temporalGroups = getTemporalGroups(state?.values.toList()); final latestRequestId = getLatestRequestId(temporalGroups); if (latestRequestId != null) { loadHistoryRequest(latestRequestId); } } }); } final Ref ref; final HiveHandler hiveHandler; bool loadHistoryMetas() { List? historyIds = hiveHandler.getHistoryIds(); if (historyIds == null || historyIds.isEmpty) { state = null; return false; } else { Map historyMetaMap = {}; for (var historyId in historyIds) { var jsonModel = hiveHandler.getHistoryMeta(historyId); if (jsonModel != null) { var jsonMap = Map.from(jsonModel); var historyMetaModelFromJson = HistoryMetaModel.fromJson(jsonMap); historyMetaMap[historyId] = historyMetaModelFromJson; } } state = historyMetaMap; return true; } } Future loadHistoryRequest(String id) async { var jsonModel = await hiveHandler.getHistoryRequest(id); if (jsonModel != null) { var jsonMap = Map.from(jsonModel); var historyRequestModelFromJson = HistoryRequestModel.fromJson(jsonMap); ref.read(selectedHistoryRequestModelProvider.notifier).state = historyRequestModelFromJson; ref.read(selectedHistoryIdStateProvider.notifier).state = id; } } void addHistoryRequest(HistoryRequestModel model) async { final id = model.historyId; state = { ...state ?? {}, id: model.metaData, }; final List updatedHistoryKeys = state == null ? [id] : [...state!.keys, id]; hiveHandler.setHistoryIds(updatedHistoryKeys); hiveHandler.setHistoryMeta(id, model.metaData.toJson()); await hiveHandler.setHistoryRequest(id, model.toJson()); await loadHistoryRequest(id); } }