import 'dart:convert'; import 'package:flutter_riverpod/flutter_riverpod.dart'; import 'package:shared_preferences/shared_preferences.dart'; import 'package:accessible_terminal/models/saved_connection.dart'; // Key for SharedPreferences const String _kSavedConnectionsKey = 'saved_connections'; class SavedConnectionsNotifier extends StateNotifier> { SavedConnectionsNotifier() : super([]) { _loadConnections(); } Future _loadConnections() async { final prefs = await SharedPreferences.getInstance(); final String? jsonString = prefs.getString(_kSavedConnectionsKey); if (jsonString != null) { try { final List jsonList = jsonDecode(jsonString); state = jsonList.map((e) => SavedConnection.fromJson(e)).toList(); } catch (e) { // Handle corruption or format change gracefully state = []; } } } Future addConnection({ required String host, required int port, required String username, String? privateKey, }) async { // Check for duplicates (simple check based on host/user/port) final exists = state.any((c) => c.host == host && c.port == port && c.username == username ); if (exists) return; // Don't save if already exists // Use timestamp for simple ID generation final simpleId = DateTime.now().millisecondsSinceEpoch.toString(); final connection = SavedConnection( id: simpleId, host: host, port: port, username: username, privateKey: privateKey, ); state = [...state, connection]; await _saveToDisk(); } Future removeConnection(String id) async { state = state.where((c) => c.id != id).toList(); await _saveToDisk(); } Future _saveToDisk() async { final prefs = await SharedPreferences.getInstance(); final jsonList = state.map((c) => c.toJson()).toList(); await prefs.setString(_kSavedConnectionsKey, jsonEncode(jsonList)); } } final savedConnectionsProvider = StateNotifierProvider>((ref) { return SavedConnectionsNotifier(); });