Files
water-management-system/mobile-app/lib/features/auth/services/auth_provider.dart
T

83 lines
2.0 KiB
Dart
Raw Normal View History

import 'package:flutter/material.dart';
import 'token_service.dart';
import '../models/user_model.dart';
/// 认证状态管理
class AuthProvider extends ChangeNotifier {
final TokenService _tokenService = TokenService();
bool _isLoading = false;
bool _isAuthenticated = false;
UserModel? _currentUser;
String? _errorMessage;
bool get isLoading => _isLoading;
bool get isAuthenticated => _isAuthenticated;
UserModel? get currentUser => _currentUser;
String? get errorMessage => _errorMessage;
/// 初始化认证状态
Future<void> init() async {
_isAuthenticated = await _tokenService.isLoggedIn();
if (_isAuthenticated) {
// TODO: 从接口获取用户信息
_currentUser = UserModel(
id: '1',
username: 'admin',
name: '管理员',
role: 'admin',
);
}
notifyListeners();
}
/// 登录
Future<bool> login({
required String username,
required String password,
}) async {
_isLoading = true;
_errorMessage = null;
notifyListeners();
try {
// TODO: 调用实际登录接口
// final response = await DioClient().post('/auth/login', data: {
// 'username': username,
// 'password': password,
// });
// 模拟登录成功
await _tokenService.saveTokens(
token: 'mock_access_token_${DateTime.now().millisecondsSinceEpoch}',
refreshToken: 'mock_refresh_token',
expiresIn: 7200,
);
_currentUser = UserModel(
id: '1',
username: username,
name: username == 'admin' ? '管理员' : username,
role: 'admin',
);
_isAuthenticated = true;
_isLoading = false;
notifyListeners();
return true;
} catch (e) {
_errorMessage = '登录失败,请检查用户名和密码';
_isLoading = false;
notifyListeners();
return false;
}
}
/// 登出
Future<void> logout() async {
await _tokenService.clearTokens();
_isAuthenticated = false;
_currentUser = null;
notifyListeners();
}
}