Files
ai-contract-platform/mobile/lib/features/auth/application/auth_controller.dart
T
2026-04-24 13:44:17 +08:00

49 lines
1.5 KiB
Dart

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<bool> isLoading = ValueNotifier<bool>(false);
final ValueNotifier<String?> errorMessage = ValueNotifier<String?>(null);
Future<void> 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<void> 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,
);
}
}