import 'dart:convert'; import 'package:flutter/material.dart'; import 'package:shared_preferences/shared_preferences.dart'; import '../services/auth_service.dart'; class AuthProvider extends ChangeNotifier { final AuthService _service = AuthService(); bool _loading = false; bool get loading => _loading; String? _token; Map? _user; String? get token => _token; Map? get user => _user; bool get isLoggedIn => _token != null && _token!.isNotEmpty; AuthProvider() { _loadFromPrefs(); } Future _loadFromPrefs() async { final prefs = await SharedPreferences.getInstance(); _token = prefs.getString('token'); final userJson = prefs.getString('user'); if (userJson != null) { try { _user = Map.from(jsonDecode(userJson)); } catch (_) { _user = null; } } notifyListeners(); } Future> login(String loginId, String password) async { _loading = true; notifyListeners(); final res = await _service.login(loginId, password); _loading = false; if (res['success'] == true) { final token = res['token']?.toString(); final userMap = res['user'] is Map ? Map.from(res['user']) : null; if (token != null && userMap != null) { await _saveSession(token, userMap); } } notifyListeners(); return res; } Future _saveSession(String token, Map userMap) async { final prefs = await SharedPreferences.getInstance(); await prefs.setString('token', token); await prefs.setString('user', jsonEncode(userMap)); _token = token; _user = userMap; } Future logout() async { // optional: call API logout if implemented if (_token != null) { try { await _service.logout(_token!); } catch (_) {} } final prefs = await SharedPreferences.getInstance(); await prefs.remove('token'); await prefs.remove('user'); _token = null; _user = null; notifyListeners(); } }