import 'dart:convert'; import 'package:linkdy/config/shared_preferences_keys.dart'; import 'package:linkdy/providers/shared_preferences_provider.dart'; import 'package:riverpod_annotation/riverpod_annotation.dart'; import 'package:linkdy/models/server_instance.dart'; part 'server_instances_provider.g.dart'; @Riverpod(keepAlive: true) class ServerInstances extends _$ServerInstances { @override List build() { final instances = ref.watch(sharedPreferencesProvider).getStringList(SharedPreferencesKeys.serversInstances); if (instances == null) return []; List generatedInstances = []; for (final instance in instances) { try { generatedInstances.add(ServerInstance.fromJson(jsonDecode(instance))); } catch (_) {/* IF ERROR OMIT */} } return generatedInstances; } ServerInstance? getInstance(String id) { try { return state.firstWhere((instance) => instance.id == id); } catch (_) { return null; } } void saveNewInstance(ServerInstance instance) { state = [instance]; saveServerInstances([instance]); } void saveServerInstances(List instances) async { final stringList = instances.map((i) => jsonEncode(i.toJson())).toList(); ref.read(sharedPreferencesProvider).setStringList(SharedPreferencesKeys.serversInstances, stringList); } void removeServerInstances() { state = []; ref.read(sharedPreferencesProvider).remove(SharedPreferencesKeys.serversInstances); } }