woocommerce_inventory/mobile_app/lib/profile_manager.dart

102 lines
2.5 KiB
Dart

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<String, dynamic> toJson() => {
'id': id,
'name': name,
'url': url,
'consumerKey': consumerKey,
'consumerSecret': consumerSecret,
};
factory SiteConfig.fromJson(Map<String, dynamic> 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<SiteConfig> _sites = [];
bool get isAuthenticated => _isAuthenticated;
bool get hasPin => _hasPin;
List<SiteConfig> get sites => _sites;
ProfileManager() {
_init();
}
Future<void> _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<void> 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<bool> 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<void> addSite(SiteConfig site) async {
_sites.add(site);
await _saveSites();
notifyListeners();
}
Future<void> removeSite(String id) async {
_sites.removeWhere((s) => s.id == id);
await _saveSites();
notifyListeners();
}
Future<void> _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();
}
}