Initial Flutter project added
This commit is contained in:
81
lib/providers/auth_provider.dart
Normal file
81
lib/providers/auth_provider.dart
Normal file
@@ -0,0 +1,81 @@
|
||||
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<String, dynamic>? _user;
|
||||
|
||||
String? get token => _token;
|
||||
Map<String, dynamic>? get user => _user;
|
||||
bool get isLoggedIn => _token != null && _token!.isNotEmpty;
|
||||
|
||||
AuthProvider() {
|
||||
_loadFromPrefs();
|
||||
}
|
||||
|
||||
Future<void> _loadFromPrefs() async {
|
||||
final prefs = await SharedPreferences.getInstance();
|
||||
_token = prefs.getString('token');
|
||||
final userJson = prefs.getString('user');
|
||||
if (userJson != null) {
|
||||
try {
|
||||
_user = Map<String, dynamic>.from(jsonDecode(userJson));
|
||||
} catch (_) {
|
||||
_user = null;
|
||||
}
|
||||
}
|
||||
notifyListeners();
|
||||
}
|
||||
|
||||
Future<Map<String, dynamic>> 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<String, dynamic>.from(res['user']) : null;
|
||||
|
||||
if (token != null && userMap != null) {
|
||||
await _saveSession(token, userMap);
|
||||
}
|
||||
}
|
||||
|
||||
notifyListeners();
|
||||
return res;
|
||||
}
|
||||
|
||||
Future<void> _saveSession(String token, Map<String, dynamic> userMap) async {
|
||||
final prefs = await SharedPreferences.getInstance();
|
||||
await prefs.setString('token', token);
|
||||
await prefs.setString('user', jsonEncode(userMap));
|
||||
_token = token;
|
||||
_user = userMap;
|
||||
}
|
||||
|
||||
Future<void> 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();
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user