import 'package:flutter/material.dart'; import '../../../shared/network/api_client.dart'; import '../../../shared/storage/session_store.dart'; import '../domain/auth_session.dart'; class AuthController { AuthController({ApiClient? apiClient}) : _apiClient = apiClient ?? const ApiClient(); final ApiClient _apiClient; final ValueNotifier isLoading = ValueNotifier(false); final ValueNotifier errorMessage = ValueNotifier(null); Future login({required String account, required String password}) async { isLoading.value = true; errorMessage.value = null; try { final session = await _apiClient.login(account: account, password: password); final currentUser = await _apiClient.fetchCurrentUser(session.accessToken); await SessionStore.save(_mergeSession(session, currentUser)); } on ApiException catch (error) { errorMessage.value = error.message; rethrow; } catch (_) { errorMessage.value = '登录失败,请稍后重试'; rethrow; } finally { isLoading.value = false; } } Future logout() async { await SessionStore.clear(); errorMessage.value = null; } AuthSession _mergeSession(AuthSession session, AuthSession currentUser) { return session.copyWith( userId: currentUser.userId, tenantId: currentUser.tenantId, username: currentUser.username, userDisplayName: currentUser.userDisplayName, role: currentUser.role, status: currentUser.status, ); } }