import 'package:get/get.dart'; import 'package:dio/dio.dart'; import 'package:get_storage/get_storage.dart'; // 导入数据提供者和数据模型 import 'package:problem_check_system/data/providers/auth_provider.dart'; import 'package:problem_check_system/data/models/login_model.dart'; import 'package:problem_check_system/app/routes/app_routes.dart'; class AuthController extends GetxController { final AuthProvider _authProvider; AuthController({required AuthProvider authProvider}) : _authProvider = authProvider; final username = ''.obs; final password = ''.obs; final isLoading = false.obs; final rememberPassword = false.obs; final _box = GetStorage(); static const _usernameKey = 'username'; static const _passwordKey = 'password'; @override void onInit() { super.onInit(); _loadSavedCredentials(); } void _loadSavedCredentials() { final savedUsername = _box.read(_usernameKey); final savedPassword = _box.read(_passwordKey); if (savedUsername != null && savedPassword != null) { username.value = savedUsername; password.value = savedPassword; rememberPassword.value = true; } } String getToken() { return ''; } void updateUsername(String value) { username.value = value; } void updatePassword(String value) { password.value = value; } Future login() async { if (username.value.isEmpty || password.value.isEmpty) { Get.snackbar('输入错误', '用户名和密码不能为空'); return; } isLoading.value = true; try { final loginData = LoginModel( username: username.value, password: password.value, ); final response = await _authProvider.signIn(loginData); if (response.statusCode == 200 && response.data['token'] != null) { final token = response.data['token']; final refreshToken = response.data['refreshToken']; _box.write('token', token); _box.write('refreshToken', refreshToken); if (rememberPassword.value) { _box.write(_usernameKey, username.value); _box.write(_passwordKey, password.value); } else { _box.remove(_usernameKey); _box.remove(_passwordKey); } Get.offAllNamed(AppRoutes.home); } else { Get.snackbar('登录失败', '服务器返回了异常数据'); } } on DioException catch (e) { if (e.response?.data != null && e.response?.data['detail'] != null) { final serverMessage = e.response!.data['detail']; Get.snackbar('登录失败', serverMessage); } else { Get.snackbar('网络错误', '登录失败,请检查您的网络连接'); } } catch (e) { Get.snackbar('错误', '发生未知错误: ${e.toString()}'); } finally { isLoading.value = false; } } Future logout() async { _box.remove('token'); _box.remove('refreshToken'); if (rememberPassword.value == false) { _box.remove(_usernameKey); _box.remove(_passwordKey); } Get.offAllNamed(AppRoutes.login); } }