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
 | 
						|
  }
 | 
						|
}
 |