diff --git a/lib/data/services/version_update_service.dart b/lib/data/services/version_update_service.dart index f2696b5b8..f624ae7aa 100644 --- a/lib/data/services/version_update_service.dart +++ b/lib/data/services/version_update_service.dart @@ -270,29 +270,29 @@ class VersionUpdateService extends GetxService { return false; } - final platformInfo = await getCurrentPlatformInfo(); + //final platformInfo = await getCurrentPlatformInfo(); try { - switch (platformInfo.storeType) { - case AppStoreType.appStore: - return await _openAppStore(); - case AppStoreType.googlePlay: - return await _openGooglePlay(); - case AppStoreType.huawei: - return await _openHuaweiStore(); - case AppStoreType.xiaomi: - return await _openXiaomiStore(); - case AppStoreType.oppo: - return await _openOppoStore(); - case AppStoreType.vivo: - return await _openVivoStore(); - case AppStoreType.honor: - return await _openHonorStore(); - case AppStoreType.official: - return await _openOfficialDownload(updateInfo.appInfo!.address!); - default: - return await _openOfficialDownload(updateInfo.appInfo!.address!); - } + // switch (platformInfo.storeType) { + // case AppStoreType.appStore: + // return await _openAppStore(); + // case AppStoreType.googlePlay: + // return await _openGooglePlay(); + // case AppStoreType.huawei: + // return await _openHuaweiStore(); + // case AppStoreType.xiaomi: + // return await _openXiaomiStore(); + // case AppStoreType.oppo: + // return await _openOppoStore(); + // case AppStoreType.vivo: + // return await _openVivoStore(); + // case AppStoreType.honor: + // return await _openHonorStore(); + // case AppStoreType.official: + // return await _openOfficialDownload(updateInfo.appInfo!.address!); + // default: + return await _openOfficialDownload(updateInfo.appInfo!.address!); + // } } catch (e) { _logger.e('执行更新失败: $e'); return false; diff --git a/lib/modules/login/controllers/login_controller.dart b/lib/modules/login/controllers/login_controller.dart index 3cd59f5fd..5b67a8d8a 100644 --- a/lib/modules/login/controllers/login_controller.dart +++ b/lib/modules/login/controllers/login_controller.dart @@ -1,3 +1,5 @@ +import 'dart:async'; + import '../../../data/models/appconfig.dart'; import '../../../data/models/appconfig_model.dart'; import 'package:get/get.dart'; @@ -815,54 +817,79 @@ class LoginController extends GetxController { // 使用登陆请求服务器 Future requestLogin(Map params) async { - Logger().d("请求后台数据login=$params"); - var response = await Api.login({ - "mail": params["mail"], - "phone": params["phone"], - "stype": params["stype"], - "vcode": params["vcode"], - "ttoken": params["ttoken"], - "phonemodel": _appVersion + _countryCode + _userChannel.toString(), - "phonemac": params["phonemac"], - "name": params["name"], - "avatar": params["avatar"], - }); - if (response != null) { - Logger().d("请求后台数据login回复数据=$response"); - - // final instance = await GetStorage(); - await _storage.write('loginInfo', jsonEncode(response)); - // 2. 将响应数据转换为User对象 - try { - Logger().d('响应数据: ${response.toString()}'); // 调试输出原始数据 - - if (response['token'].toString() != '') { - // 新增:检查 user 字段是否存在且类型正确 - // if (response.containsKey('data') && response['data'] is Map) { - final user = User.fromJson(response); - Logger().d('用户初始化成功: ${response['token'].toString()}'); - await _storage.write("logintoken", response['token'].toString()); - // 存储到 SharedPreferences (仅存储用户数据) - //final prefs = await GetStorage(); - await _storage.write('user_info', user.toJson()); - - //获取app的配置信息 - await getAppConfig(); - Get.offAllNamed(Routes.pairing); - // } else { - // throw FormatException('API 响应缺少 user 字段'); - // } - } else { - throw Exception('接口返回错误: ${response['msg']}'); + try { + Logger().d("请求后台数据login=$params"); + // 在Api.login调用时添加超时 + var response = await Api.login({ + "mail": params["mail"], + "phone": params["phone"], + "stype": params["stype"], + "vcode": params["vcode"], + "ttoken": params["ttoken"], + "phonemodel": _appVersion + _countryCode + _userChannel.toString(), + "phonemac": params["phonemac"], + "name": params["name"], + "avatar": params["avatar"], + }).timeout( + const Duration(seconds: 30), // 30秒超时 + onTimeout: () { + throw TimeoutException('登录请求超时', const Duration(seconds: 30)); + }, + ); + if (response != null) { + Logger().d("请求后台数据login回复数据=$response"); + + await _storage.write('loginInfo', jsonEncode(response)); + + try { + Logger().d('响应数据: ${response.toString()}'); + + if (response['token'].toString() != '') { + final user = User.fromJson(response); + Logger().d('用户初始化成功: ${response['token'].toString()}'); + await _storage.write("logintoken", response['token'].toString()); + await _storage.write('user_info', user.toJson()); + + // 获取app的配置信息 + await getAppConfig(); + Get.offAllNamed(Routes.pairing); + } else { + throw Exception('接口返回错误: ${response['msg']}'); + } + } catch (e, stack) { + Logger().d('用户数据处理失败: $e'); + Logger().d('堆栈跟踪: $stack'); + Get.snackbar( + 'error'.tr, + 'userDataParseFailed'.tr, // 用户数据解析失败 + snackPosition: SnackPosition.TOP, + backgroundColor: Colors.red.withOpacity(0.1), + colorText: Colors.red, + ); } - } catch (e, stack) { - // 新增:打印堆栈跟踪 - Logger().d('用户数据处理失败: $e'); - Logger().d('堆栈跟踪: $stack'); - Get.snackbar('错误', '用户数据解析失败,请检查网络'); + } else { + // API返回null的情况 + Get.snackbar( + 'error'.tr, + 'networkError'.tr, // 网络错误,请重试 + snackPosition: SnackPosition.TOP, + backgroundColor: Colors.red.withOpacity(0.1), + colorText: Colors.red, + ); } - - // Get.offAll(() => IndexWidget()); + } catch (e) { + // 网络请求异常 + Logger().e('登录请求失败: $e'); + Get.snackbar( + 'error'.tr, + 'loginFailed'.tr, // 登录失败 + snackPosition: SnackPosition.TOP, + backgroundColor: Colors.red.withOpacity(0.1), + colorText: Colors.red, + ); + } finally { + // 确保无论成功还是失败都重置加载状态 + _isLoading.value = false; } } diff --git a/lib/modules/login/views/login_view.dart b/lib/modules/login/views/login_view.dart index 014740d9c..42318e96d 100644 --- a/lib/modules/login/views/login_view.dart +++ b/lib/modules/login/views/login_view.dart @@ -13,12 +13,17 @@ class LoginView extends GetView { Widget build(BuildContext context) { final isDarkMode = Theme.of(context).brightness == Brightness.dark; - return Scaffold( - backgroundColor: isDarkMode ? Colors.black : Colors.grey[50], - body: SafeArea( - child: Obx(() => controller.viewState == LoginViewState.welcome - ? _buildWelcomeView(isDarkMode) - : _buildVerificationView(context, isDarkMode)), + return GestureDetector( + onTap: () { + FocusScope.of(context).unfocus(); + }, + child: Scaffold( + backgroundColor: isDarkMode ? Colors.black : Colors.grey[50], + body: SafeArea( + child: Obx(() => controller.viewState == LoginViewState.welcome + ? _buildWelcomeView(isDarkMode) + : _buildVerificationView(context, isDarkMode)), + ), ), ); }