diff --git a/lib/data/models/user_Info.dart b/lib/data/models/user_Info.dart index 32662c615..ecbbaf33e 100644 --- a/lib/data/models/user_Info.dart +++ b/lib/data/models/user_Info.dart @@ -70,6 +70,30 @@ class User { // createtime: _parseTimestamp(userData['createtime']), // wxopenid: (userData?['wxopenid'] as String?) ?? '', // googleopenid: (userData?['googleopenid'] as String?) ?? '', +// facebookopenid: (userData?['facebookopenid'] as String?) ?? '', + ); + } + factory User.fronTokenJson(Map json) { + // 修复1:安全获取嵌套的 user 字段 + final userData = json['user'] as Map?; // 允许空值 + final token = ''; + // 更新单例实例 + return _instance = User._( + token: token as String? ?? '', + name: (userData?['name'] as String?) ?? '默认名称', // 提供默认值 + uid: (userData?['uid'] as String?) ?? '', + avatar: (userData?['avatar'] as String?) ?? '', + deviceid: (userData?['deviceid'] as String?) ?? '', + language: (userData?['language'] as String?) ?? 'en', + + mail: (userData?['mail'] as String?) ?? '', + phone: (userData?['phone'] as String?) ?? '', + phonemac: (userData?['phonemac'] as String?) ?? '', + password: (userData?['password'] as String?) ?? '', +// lastbettime: _parseTimestamp(userData['lastbettime']), +// createtime: _parseTimestamp(userData['createtime']), +// wxopenid: (userData?['wxopenid'] as String?) ?? '', +// googleopenid: (userData?['googleopenid'] as String?) ?? '', // facebookopenid: (userData?['facebookopenid'] as String?) ?? '', ); } diff --git a/lib/data/services/network/api.dart b/lib/data/services/network/api.dart index 84ff33446..48e3758c1 100644 --- a/lib/data/services/network/api.dart +++ b/lib/data/services/network/api.dart @@ -4,6 +4,7 @@ import 'nw_method.dart'; class Api { // 登录 static login([params]) { + print("请求后台数据params=${params}"); return DioManager().request( NWMethod.post, '/api/home/user_sgin', @@ -20,6 +21,15 @@ class Api { ); } + static tokenlogin([params]) { + print("请求后台数据params=${params}"); + return DioManager().request( + NWMethod.post, + '/api/home/user_getinfo', + params: params, + ); + } + // 获取阿里token static getAliToken([params]) { return DioManager().request( diff --git a/lib/data/services/network/auth_interceptor.dart b/lib/data/services/network/auth_interceptor.dart index 655751e4c..4fceb6d4e 100644 --- a/lib/data/services/network/auth_interceptor.dart +++ b/lib/data/services/network/auth_interceptor.dart @@ -1,65 +1,66 @@ -// import 'package:dio/dio.dart'; -// import 'package:flutter_easyloading/flutter_easyloading.dart'; -// import 'package:get/get.dart' hide Response; +import 'package:dio/dio.dart'; +import 'package:flutter_easyloading/flutter_easyloading.dart'; +import 'package:get/get.dart' hide Response; -// import '../scenes/start/start_logic.dart'; -// import 'entity/base_entity.dart'; +import 'package:get_storage/get_storage.dart'; +import 'entity/base_entity.dart'; -// class AuthInterceptor extends Interceptor { -// final state = Get.find().state; +class AuthInterceptor extends Interceptor { + final GetStorage _storage = GetStorage(); -// @override -// void onRequest(RequestOptions options, RequestInterceptorHandler handler) { -// options.headers['Authorization'] = state.loginModel.token; -// handler.next(options); -// } + @override + void onRequest(RequestOptions options, RequestInterceptorHandler handler) { + var jsonString = _storage.read("logintoken"); + options.headers['Authorization'] = jsonString; + handler.next(options); + } -// @override -// void onResponse(Response response, ResponseInterceptorHandler handler) async { -// BaseEntity entity = BaseEntity.fromJson(response.data); -// if (entity.code == 0) { -// response.data = entity.data ?? {}; -// handler.resolve(response); -// } else { -// response.data = null; -// handler.next(response); -// return EasyLoading.showError(entity.message ?? 'unknownError'.tr); -// } -// } + @override + void onResponse(Response response, ResponseInterceptorHandler handler) async { + BaseEntity entity = BaseEntity.fromJson(response.data); + if (entity.code == 0) { + response.data = entity.data ?? {}; + handler.resolve(response); + } else { + response.data = null; + handler.next(response); + return EasyLoading.showError(entity.message ?? 'unknownError'.tr); + } + } -// @override -// void onError(DioException err, ErrorInterceptorHandler handler) { -// switch (err.type) { -// case DioExceptionType.cancel: -// { -// EasyLoading.showError('requestCancellation'.tr); -// } -// case DioExceptionType.connectionTimeout: -// { -// EasyLoading.showError('connectionTimeout'.tr); -// } -// case DioExceptionType.sendTimeout: -// { -// EasyLoading.showError('requestTimeout'.tr); -// } -// case DioExceptionType.receiveTimeout: -// { -// EasyLoading.showError('responseTimeout'.tr); -// } -// case DioExceptionType.badResponse: -// { -// try { -// String? errMsg = err.response?.statusMessage; -// EasyLoading.showError(errMsg ?? 'unknownError'.tr); -// } on Exception catch (_) { -// EasyLoading.showError('unknownError'.tr); -// } -// } -// default: -// { -// EasyLoading.showError(err.message ?? 'unknownError'.tr); -// } -// } -// handler.next(err); -// } -// } + @override + void onError(DioException err, ErrorInterceptorHandler handler) { + switch (err.type) { + case DioExceptionType.cancel: + { + EasyLoading.showError('requestCancellation'.tr); + } + case DioExceptionType.connectionTimeout: + { + EasyLoading.showError('connectionTimeout'.tr); + } + case DioExceptionType.sendTimeout: + { + EasyLoading.showError('requestTimeout'.tr); + } + case DioExceptionType.receiveTimeout: + { + EasyLoading.showError('responseTimeout'.tr); + } + case DioExceptionType.badResponse: + { + try { + String? errMsg = err.response?.statusMessage; + EasyLoading.showError(errMsg ?? 'unknownError'.tr); + } on Exception catch (_) { + EasyLoading.showError('unknownError'.tr); + } + } + default: + { + EasyLoading.showError(err.message ?? 'unknownError'.tr); + } + } + handler.next(err); + } +} diff --git a/lib/data/services/network/dio_manager.dart b/lib/data/services/network/dio_manager.dart index a41e81228..10952e905 100644 --- a/lib/data/services/network/dio_manager.dart +++ b/lib/data/services/network/dio_manager.dart @@ -20,7 +20,7 @@ class DioManager { ); dio = Dio(options); - +//fdp // dio.interceptors.add(AuthInterceptor()); } diff --git a/lib/modules/login/controllers/login_controller.dart b/lib/modules/login/controllers/login_controller.dart index 366fe48c5..2f8720cc7 100644 --- a/lib/modules/login/controllers/login_controller.dart +++ b/lib/modules/login/controllers/login_controller.dart @@ -3,11 +3,10 @@ import 'package:flutter/material.dart'; import '../../../routes/app_routes.dart'; import 'dart:convert'; import 'dart:ffi'; -import '../../settings/controllers/settings_controller.dart'; import 'facebookLogin.dart'; import 'googleLogin.dart'; import 'weixinLogin.dart'; -import '../entity/api.dart'; +import '../../../data/services/network/api.dart'; import '../../../../data/models/user_Info.dart'; //import 'package:shared_preferences/shared_preferences.dart'; import 'package:get_storage/get_storage.dart'; @@ -223,6 +222,21 @@ class LoginController extends GetxController { return !_verificationCode.contains(''); } + Future getLoginToken() async { + // 使用正确语法创建请求头 + var response = await Api.tokenlogin(); + if (response != null) { + if (response?["code"] == null) { + final user = User.fronTokenJson(response); + await _storage.write( + 'user', jsonEncode(user.toJson())); // 使用 user.toJson() + Get.offAllNamed(Routes.pairing); + } + } else { + login(); + } + } + // 登录 Future login() async { // 暂时关闭验证码验证 @@ -240,26 +254,27 @@ class LoginController extends GetxController { _isLoading.value = true; try { - // 模拟验证过程 await Future.delayed(const Duration(seconds: 2)); + // 模拟验证过程 + switch (loginType) { case 0 || 1: { - if (!isVerificationCodeComplete()) { - Get.snackbar( - '提示', - '请输入完整的验证码', - snackPosition: SnackPosition.TOP, - backgroundColor: Colors.red.withOpacity(0.1), - colorText: Colors.red, - ); - break; - } + // if (!isVerificationCodeComplete()) { + // Get.snackbar( + // '提示', + // '请输入完整的验证码', + // snackPosition: SnackPosition.TOP, + // backgroundColor: Colors.red.withOpacity(0.1), + // colorText: Colors.red, + // ); + // break; + // } requestLogin({ - "mail": verificationCodeController.text, + "mail": contactController.text, "phone": "", "stype": loginType, - "vcode": contactController.text, + "vcode": verificationCodeController.text, "ttoken": "", "phonemodel": "", "phonemac": "", @@ -410,13 +425,12 @@ class LoginController extends GetxController { try { print('响应数据: ${response.toString()}'); // 调试输出原始数据 - if (response['code'].toString() == '0' && - response['msg'].toString() == "Success") { + if (response['code'].toString() == '0') { // 新增:检查 user 字段是否存在且类型正确 if (response.containsKey('data') && response['data'] is Map) { final user = User.fromJson(response); - print('用户初始化成功: ${user.name}'); - + print('用户初始化成功: ${user.token}'); + await _storage.write("logintoken", user.token); // 存储到 SharedPreferences (仅存储用户数据) //final prefs = await GetStorage(); await _storage.write( diff --git a/lib/modules/login/entity/api.dart b/lib/modules/login/entity/api.dart deleted file mode 100644 index 263db3187..000000000 --- a/lib/modules/login/entity/api.dart +++ /dev/null @@ -1,33 +0,0 @@ -import 'dio_manager.dart'; -import 'nw_method.dart'; - -class Api { - // 登录 - static login([params]) { - print("请求后台数据params=${params}"); - return DioManager().request( - NWMethod.post, - '/api/home/user_sgin', - params: params, - ); - } - - // 获取验证码 - static getCode([params]) { - print("请求后台数据params=${params}"); - return DioManager().request( - NWMethod.post, - '/api/home/user_verification', - params: params, - ); - } - - // 获取阿里token - static getAliToken([params]) { - return DioManager().request( - NWMethod.post, - '/api/home/auth_alitoken', - params: params, - ); - } -} diff --git a/lib/modules/login/entity/dio_manager.dart b/lib/modules/login/entity/dio_manager.dart deleted file mode 100644 index 0635524c0..000000000 --- a/lib/modules/login/entity/dio_manager.dart +++ /dev/null @@ -1,45 +0,0 @@ -import 'package:dio/dio.dart'; - -//import 'auth_interceptor.dart'; -import 'nw_api.dart'; -import 'nw_method.dart'; - -class DioManager { - static final DioManager _shared = DioManager._internal(); - factory DioManager() => _shared; - - late Dio dio; - - DioManager._internal() { - BaseOptions options = BaseOptions( - baseUrl: NWApi.baseApi, - contentType: Headers.jsonContentType, - responseType: ResponseType.json, - connectTimeout: const Duration(seconds: 30), - receiveTimeout: const Duration(seconds: 30), - ); - - dio = Dio(options); - - //dio.interceptors.add(AuthInterceptor()); - } - - // 请求,返回参数为 T - // method:请求方法,NWMethod.POST等 - // path:请求地址 - // params:请求参数 - Future request( - NWMethod method, - String path, { - Map? params, - Map? queryParameters, - }) async { - Response response = await dio.request( - path, - data: params, - queryParameters: queryParameters, - options: Options(method: nwMethodValues[method]), - ); - return response.data; - } -} diff --git a/lib/modules/login/entity/nw_api.dart b/lib/modules/login/entity/nw_api.dart deleted file mode 100644 index 875a166b6..000000000 --- a/lib/modules/login/entity/nw_api.dart +++ /dev/null @@ -1,4 +0,0 @@ -class NWApi { - // static const baseApi = "https://www.deapsound.com"; - static const baseApi = "https://www.deapsound.com"; -} diff --git a/lib/modules/login/entity/nw_method.dart b/lib/modules/login/entity/nw_method.dart deleted file mode 100644 index f79ca96e3..000000000 --- a/lib/modules/login/entity/nw_method.dart +++ /dev/null @@ -1,8 +0,0 @@ -enum NWMethod { get, post, delete, put } - -const nwMethodValues = { - NWMethod.get: "get", - NWMethod.post: "post", - NWMethod.delete: "delete", - NWMethod.put: "put" -}; diff --git a/lib/modules/splash/controllers/splash_controller.dart b/lib/modules/splash/controllers/splash_controller.dart index c0b4cf9fe..6883c6487 100644 --- a/lib/modules/splash/controllers/splash_controller.dart +++ b/lib/modules/splash/controllers/splash_controller.dart @@ -84,4 +84,5 @@ class SplashController extends GetxController { Get.offAllNamed(Routes.login); }); } + // fdp挑转登陆 }