|
|
|
@ -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<void> 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; |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|