import 'package:flutter_riverpod/flutter_riverpod.dart'; import 'package:shared_preferences/shared_preferences.dart'; const _kServerUrl = 'server_url'; final sharedPreferencesProvider = Provider((ref) { throw UnimplementedError('Override in ProviderScope'); }); final cookiesPathProvider = Provider((ref) { throw UnimplementedError('Override in ProviderScope'); }); final serverUrlProvider = StateNotifierProvider((ref) { final prefs = ref.watch(sharedPreferencesProvider); return ServerUrlNotifier(prefs); }); class ServerUrlNotifier extends StateNotifier { final SharedPreferences _prefs; ServerUrlNotifier(this._prefs) : super(_prefs.getString(_kServerUrl)); Future setUrl(String url) async { // Strip trailing slash final clean = url.endsWith('/') ? url.substring(0, url.length - 1) : url; await _prefs.setString(_kServerUrl, clean); state = clean; } Future clear() async { await _prefs.remove(_kServerUrl); state = null; } }