75 lines
1.9 KiB
Dart
75 lines
1.9 KiB
Dart
import 'dart:convert';
|
|
import 'package:shared_preferences/shared_preferences.dart';
|
|
|
|
class UserManager {
|
|
static const String _userKey = 'user';
|
|
static UserManager? _instance;
|
|
static Map<String, dynamic>? _cachedUser;
|
|
|
|
// Private constructor for singleton
|
|
UserManager._privateConstructor();
|
|
|
|
// Factory constructor to get the singleton instance
|
|
factory UserManager() {
|
|
_instance ??= UserManager._privateConstructor();
|
|
return _instance!;
|
|
}
|
|
|
|
// Initialize and load user data
|
|
Future<void> initialize() async {
|
|
if (_cachedUser == null) {
|
|
final prefs = await SharedPreferences.getInstance();
|
|
final userData = prefs.getString(_userKey);
|
|
if (userData != null) {
|
|
_cachedUser = jsonDecode(userData) as Map<String, dynamic>;
|
|
}
|
|
}
|
|
}
|
|
|
|
// Accessor for user token
|
|
String? get token {
|
|
return _cachedUser?['token'];
|
|
}
|
|
|
|
// Accessor for user name
|
|
String? get userName {
|
|
return _cachedUser?['fullname'];
|
|
}
|
|
|
|
// Accessor for user email
|
|
String? get email {
|
|
return _cachedUser?['email'];
|
|
}
|
|
|
|
// Accessor for user id
|
|
int? get userId {
|
|
return _cachedUser?['userId'];
|
|
}
|
|
|
|
// Accessor for user roles (Assuming it's a list of roles in the user data)
|
|
List<String>? get roles {
|
|
if (_cachedUser?['roles'] != null) {
|
|
return List<String>.from(_cachedUser!['roles']);
|
|
}
|
|
return null;
|
|
}
|
|
|
|
// Save user data and cache it
|
|
Future<void> setUser(Map<String, dynamic> user) async {
|
|
final prefs = await SharedPreferences.getInstance();
|
|
final userData = jsonEncode(user);
|
|
await prefs.setString(_userKey, userData);
|
|
_cachedUser = user; // Update cache
|
|
}
|
|
|
|
// Clear user data and cache
|
|
Future<void> clearUser() async {
|
|
final prefs = await SharedPreferences.getInstance();
|
|
|
|
await prefs.remove(_userKey);
|
|
await prefs.remove('isLoggedIn');
|
|
await prefs.clear();
|
|
_cachedUser = null; // Clear cache
|
|
}
|
|
}
|