import 'package:flutter_riverpod/flutter_riverpod.dart'; import 'package:shared_preferences/shared_preferences.dart'; import 'map_provider_interface.dart'; import 'open_street_map_provider.dart'; import 'google_map_provider.dart'; final mapConfigProvider = Provider((ref) { return const MapConfig(); }); class MapProviderTypeNotifier extends StateNotifier { static const String _prefKey = 'selected_map_provider_type'; MapProviderTypeNotifier() : super(AppMapType.openStreetMap) { _loadFromPrefs(); } Future _loadFromPrefs() async { final prefs = await SharedPreferences.getInstance(); final savedVal = prefs.getString(_prefKey); if (savedVal != null) { if (savedVal == 'googleMaps') { state = AppMapType.googleMaps; } else { state = AppMapType.openStreetMap; } } } Future setMapProviderType(AppMapType type) async { state = type; final prefs = await SharedPreferences.getInstance(); await prefs.setString(_prefKey, type.name); } } final mapProviderTypeNotifierProvider = StateNotifierProvider((ref) { return MapProviderTypeNotifier(); }); final activeMapProvider = Provider((ref) { final type = ref.watch(mapProviderTypeNotifierProvider); switch (type) { case AppMapType.openStreetMap: return OpenStreetMapProvider(); case AppMapType.googleMaps: return GoogleMapProvider(); } }); class MapFollowNotifier extends StateNotifier { MapFollowNotifier() : super(true); void setFollow(bool follow) { state = follow; } void userInteracted() { state = false; } void recenter() { state = true; } } final mapFollowStateProvider = StateNotifierProvider((ref) { return MapFollowNotifier(); });