import 'dart:convert'; import 'dart:typed_data'; import 'package:shared_preferences/shared_preferences.dart'; import '../models/contact.dart'; class ContactStore { static const String _key = 'contacts'; Future> loadContacts() async { final prefs = await SharedPreferences.getInstance(); final jsonStr = prefs.getString(_key); if (jsonStr == null) return []; try { final jsonList = jsonDecode(jsonStr) as List; return jsonList.map((entry) => _fromJson(entry as Map)).toList(); } catch (_) { return []; } } Future saveContacts(List contacts) async { final prefs = await SharedPreferences.getInstance(); final jsonList = contacts.map(_toJson).toList(); await prefs.setString(_key, jsonEncode(jsonList)); } Map _toJson(Contact contact) { return { 'publicKey': base64Encode(contact.publicKey), 'name': contact.name, 'type': contact.type, 'pathLength': contact.pathLength, 'path': base64Encode(contact.path), 'latitude': contact.latitude, 'longitude': contact.longitude, 'lastSeen': contact.lastSeen.millisecondsSinceEpoch, }; } Contact _fromJson(Map json) { return Contact( publicKey: Uint8List.fromList(base64Decode(json['publicKey'] as String)), name: json['name'] as String? ?? 'Unknown', type: json['type'] as int? ?? 0, pathLength: json['pathLength'] as int? ?? -1, path: json['path'] != null ? Uint8List.fromList(base64Decode(json['path'] as String)) : Uint8List(0), latitude: (json['latitude'] as num?)?.toDouble(), longitude: (json['longitude'] as num?)?.toDouble(), lastSeen: DateTime.fromMillisecondsSinceEpoch(json['lastSeen'] as int? ?? 0), ); } }