智慧水务管理系统 - 精河县供水工程综合管理平台

auth_provider.dart 2.0KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182
  1. import 'package:flutter/material.dart';
  2. import 'token_service.dart';
  3. import '../models/user_model.dart';
  4. /// 认证状态管理
  5. class AuthProvider extends ChangeNotifier {
  6. final TokenService _tokenService = TokenService();
  7. bool _isLoading = false;
  8. bool _isAuthenticated = false;
  9. UserModel? _currentUser;
  10. String? _errorMessage;
  11. bool get isLoading => _isLoading;
  12. bool get isAuthenticated => _isAuthenticated;
  13. UserModel? get currentUser => _currentUser;
  14. String? get errorMessage => _errorMessage;
  15. /// 初始化认证状态
  16. Future<void> init() async {
  17. _isAuthenticated = await _tokenService.isLoggedIn();
  18. if (_isAuthenticated) {
  19. // TODO: 从接口获取用户信息
  20. _currentUser = UserModel(
  21. id: '1',
  22. username: 'admin',
  23. name: '管理员',
  24. role: 'admin',
  25. );
  26. }
  27. notifyListeners();
  28. }
  29. /// 登录
  30. Future<bool> login({
  31. required String username,
  32. required String password,
  33. }) async {
  34. _isLoading = true;
  35. _errorMessage = null;
  36. notifyListeners();
  37. try {
  38. // TODO: 调用实际登录接口
  39. // final response = await DioClient().post('/auth/login', data: {
  40. // 'username': username,
  41. // 'password': password,
  42. // });
  43. // 模拟登录成功
  44. await _tokenService.saveTokens(
  45. token: 'mock_access_token_${DateTime.now().millisecondsSinceEpoch}',
  46. refreshToken: 'mock_refresh_token',
  47. expiresIn: 7200,
  48. );
  49. _currentUser = UserModel(
  50. id: '1',
  51. username: username,
  52. name: username == 'admin' ? '管理员' : username,
  53. role: 'admin',
  54. );
  55. _isAuthenticated = true;
  56. _isLoading = false;
  57. notifyListeners();
  58. return true;
  59. } catch (e) {
  60. _errorMessage = '登录失败,请检查用户名和密码';
  61. _isLoading = false;
  62. notifyListeners();
  63. return false;
  64. }
  65. }
  66. /// 登出
  67. Future<void> logout() async {
  68. await _tokenService.clearTokens();
  69. _isAuthenticated = false;
  70. _currentUser = null;
  71. notifyListeners();
  72. }
  73. }