import 'dart:convert'; import 'package:flutter/material.dart'; import 'package:shared_preferences/shared_preferences.dart'; class SiteConfig { final String id; final String name; final String url; final String consumerKey; final String consumerSecret; SiteConfig({ required this.id, required this.name, required this.url, required this.consumerKey, required this.consumerSecret, }); Map toJson() => { 'id': id, 'name': name, 'url': url, 'consumerKey': consumerKey, 'consumerSecret': consumerSecret, }; factory SiteConfig.fromJson(Map json) => SiteConfig( id: json['id'], name: json['name'], url: json['url'], consumerKey: json['consumerKey'], consumerSecret: json['consumerSecret'], ); } class ProfileManager with ChangeNotifier { bool _isAuthenticated = false; bool _hasPin = false; List _sites = []; bool get isAuthenticated => _isAuthenticated; bool get hasPin => _hasPin; List get sites => _sites; ProfileManager() { _init(); } Future _init() async { final prefs = await SharedPreferences.getInstance(); _hasPin = prefs.containsKey('app_pin'); final sitesJson = prefs.getStringList('saved_sites') ?? []; _sites = sitesJson.map((s) => SiteConfig.fromJson(jsonDecode(s))).toList(); notifyListeners(); } Future setPin(String pin) async { final prefs = await SharedPreferences.getInstance(); await prefs.setString('app_pin', pin); _hasPin = true; _isAuthenticated = true; // Auto login on creation notifyListeners(); } Future unlock(String pin) async { final prefs = await SharedPreferences.getInstance(); final storedPin = prefs.getString('app_pin'); if (storedPin == pin) { _isAuthenticated = true; notifyListeners(); return true; } return false; } Future addSite(SiteConfig site) async { _sites.add(site); await _saveSites(); notifyListeners(); } Future removeSite(String id) async { _sites.removeWhere((s) => s.id == id); await _saveSites(); notifyListeners(); } Future _saveSites() async { final prefs = await SharedPreferences.getInstance(); final sitesJson = _sites.map((s) => jsonEncode(s.toJson())).toList(); await prefs.setStringList('saved_sites', sitesJson); } void logout() { _isAuthenticated = false; notifyListeners(); } }