From cb4b722ccaf42ff550a811cd10576ad457ae3d91 Mon Sep 17 00:00:00 2001 From: Jolie <412895109@qq.com> Date: Tue, 4 Nov 2025 08:48:28 +0800 Subject: [PATCH] =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E8=8E=B7=E5=8F=96=E9=AA=8C?= =?UTF-8?q?=E8=AF=81=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- lib/config/env_config.dart | 8 ++-- lib/network/api_urls.dart | 12 ++++++ lib/network/network_config.dart | 2 +- lib/network/user_api.dart | 16 ++++---- lib/network/user_api.g.dart | 57 ++++++++++++++++++++-------- lib/pages/mine/login_controller.dart | 15 ++++---- lib/pages/mine/login_page.dart | 2 +- 7 files changed, 77 insertions(+), 35 deletions(-) create mode 100644 lib/network/api_urls.dart diff --git a/lib/config/env_config.dart b/lib/config/env_config.dart index 4fceff6..64debbd 100644 --- a/lib/config/env_config.dart +++ b/lib/config/env_config.dart @@ -8,14 +8,14 @@ class EnvConfig { // 开发环境配置 static const Map _devConfig = { - 'mainBaseUrl': 'https://dating-agency-api-test.qniao.cn', - 'fileBaseUrl': 'https://dating-agency-api-test.qniao.cn', + 'mainBaseUrl': 'https://dating-agency-api-test.qniao.cn/', + 'fileBaseUrl': 'https://dating-agency-api-test.qniao.cn/', }; // 生产环境配置 static const Map _releaseConfig = { - 'mainBaseUrl': 'https://dating-agency-api-test.qniao.cn', - 'fileBaseUrl': 'https://dating-agency-api-test.qniao.cn', + 'mainBaseUrl': 'https://dating-agency-api-test.qniao.cn/', + 'fileBaseUrl': 'https://dating-agency-api-test.qniao.cn/', }; /// 获取当前环境的配置值 diff --git a/lib/network/api_urls.dart b/lib/network/api_urls.dart new file mode 100644 index 0000000..39e395f --- /dev/null +++ b/lib/network/api_urls.dart @@ -0,0 +1,12 @@ +/// API端点URL配置文件 +/// 集中管理所有API接口路径,方便维护和修改 +class ApiUrls { + // 认证相关接口 + static const String login = 'dating-agency-uec/authorize/by-captcha'; + static const String getVerificationCode = 'dating-agency-uec/authorize/get/auth-captcha'; + + // 用户相关接口 + static const String getUserInfo = 'dating-agency-uec/user/get/base-info'; + + // 后续可以在此添加更多API端点 +} \ No newline at end of file diff --git a/lib/network/network_config.dart b/lib/network/network_config.dart index ba0ef7a..82c4927 100644 --- a/lib/network/network_config.dart +++ b/lib/network/network_config.dart @@ -123,7 +123,7 @@ class ResponseInterceptor extends Interceptor { void onError(DioException err, ErrorInterceptorHandler handler) { // 统一处理错误 String errorMessage = '网络请求失败'; - + print('DioError: ${err.message}'); switch (err.type) { case DioExceptionType.connectionTimeout: case DioExceptionType.sendTimeout: diff --git a/lib/network/user_api.dart b/lib/network/user_api.dart index 975f931..e028377 100644 --- a/lib/network/user_api.dart +++ b/lib/network/user_api.dart @@ -1,22 +1,24 @@ +import 'package:dating_touchme_app/network/response_model.dart'; +import 'package:dating_touchme_app/network/api_urls.dart'; import 'package:retrofit/retrofit.dart'; import 'package:dio/dio.dart'; part 'user_api.g.dart'; -@RestApi(baseUrl: 'https://api.example.com/') +@RestApi(baseUrl: '') abstract class UserApi { factory UserApi(Dio dio) = _UserApi; - @POST("dating-agency-uec/authorize/by-captcha") - Future> login( + @POST(ApiUrls.login) + Future>> login( @Body() Map data, ); - @GET("user/info") - Future> getUserInfo(); + @GET(ApiUrls.getUserInfo) + Future>> getUserInfo(); - @POST("dating-agency-uec/authorize/get/auth-captcha") - Future> getVerificationCode( + @POST(ApiUrls.getVerificationCode) + Future>> getVerificationCode( @Body() Map data, ); } \ No newline at end of file diff --git a/lib/network/user_api.g.dart b/lib/network/user_api.g.dart index bc2e076..264f216 100644 --- a/lib/network/user_api.g.dart +++ b/lib/network/user_api.g.dart @@ -11,9 +11,7 @@ part of 'user_api.dart'; // ignore_for_file: unnecessary_brace_in_string_interps,no_leading_underscores_for_local_identifiers,unused_element,unnecessary_string_interpolations,unused_element_parameter,avoid_unused_constructor_parameters,unreachable_from_main class _UserApi implements UserApi { - _UserApi(this._dio, {this.baseUrl, this.errorLogger}) { - baseUrl ??= 'https://api.example.com/'; - } + _UserApi(this._dio, {this.baseUrl, this.errorLogger}); final Dio _dio; @@ -22,13 +20,15 @@ class _UserApi implements UserApi { final ParseErrorLogger? errorLogger; @override - Future> login(Map data) async { + Future>> login( + Map data, + ) async { final _extra = {}; final queryParameters = {}; final _headers = {}; final _data = {}; _data.addAll(data); - final _options = _setStreamType>( + final _options = _setStreamType>>( Options(method: 'POST', headers: _headers, extra: _extra) .compose( _dio.options, @@ -38,19 +38,28 @@ class _UserApi implements UserApi { ) .copyWith(baseUrl: _combineBaseUrls(_dio.options.baseUrl, baseUrl)), ); - final _result = await _dio.fetch(_options); - final _value = _result.data; + final _result = await _dio.fetch>(_options); + late BaseResponse _value; + try { + _value = BaseResponse.fromJson( + _result.data!, + (json) => json as dynamic, + ); + } on Object catch (e, s) { + errorLogger?.logError(e, s, _options); + rethrow; + } final httpResponse = HttpResponse(_value, _result); return httpResponse; } @override - Future> getUserInfo() async { + Future>> getUserInfo() async { final _extra = {}; final queryParameters = {}; final _headers = {}; const Map? _data = null; - final _options = _setStreamType>( + final _options = _setStreamType>>( Options(method: 'GET', headers: _headers, extra: _extra) .compose( _dio.options, @@ -60,14 +69,23 @@ class _UserApi implements UserApi { ) .copyWith(baseUrl: _combineBaseUrls(_dio.options.baseUrl, baseUrl)), ); - final _result = await _dio.fetch(_options); - final _value = _result.data; + final _result = await _dio.fetch>(_options); + late BaseResponse _value; + try { + _value = BaseResponse.fromJson( + _result.data!, + (json) => json as dynamic, + ); + } on Object catch (e, s) { + errorLogger?.logError(e, s, _options); + rethrow; + } final httpResponse = HttpResponse(_value, _result); return httpResponse; } @override - Future> getVerificationCode( + Future>> getVerificationCode( Map data, ) async { final _extra = {}; @@ -75,7 +93,7 @@ class _UserApi implements UserApi { final _headers = {}; final _data = {}; _data.addAll(data); - final _options = _setStreamType>( + final _options = _setStreamType>>( Options(method: 'POST', headers: _headers, extra: _extra) .compose( _dio.options, @@ -85,8 +103,17 @@ class _UserApi implements UserApi { ) .copyWith(baseUrl: _combineBaseUrls(_dio.options.baseUrl, baseUrl)), ); - final _result = await _dio.fetch(_options); - final _value = _result.data; + final _result = await _dio.fetch>(_options); + late BaseResponse _value; + try { + _value = BaseResponse.fromJson( + _result.data!, + (json) => json as dynamic, + ); + } on Object catch (e, s) { + errorLogger?.logError(e, s, _options); + rethrow; + } final httpResponse = HttpResponse(_value, _result); return httpResponse; } diff --git a/lib/pages/mine/login_controller.dart b/lib/pages/mine/login_controller.dart index 44a6c9a..6888878 100644 --- a/lib/pages/mine/login_controller.dart +++ b/lib/pages/mine/login_controller.dart @@ -50,11 +50,12 @@ class LoginController extends GetxController { final response = await _userApi.getVerificationCode(params); // 处理响应 - if (response.data != null && response.data['code'] == 0) { + if (response.data.isSuccess) { + print('验证码发送成功'); // 开始倒计时 startCountdown(); } else { - SmartDialog.showToast(response.data?['message'] ?? '获取验证码失败'); + SmartDialog.showToast(response.data.message); } } catch (e) { SmartDialog.showToast('网络请求失败,请重试'); @@ -105,11 +106,11 @@ class LoginController extends GetxController { final response = await _userApi.login(params); // 处理响应 - if (response.data != null && response.data['code'] == 0) { + if (response.data.isSuccess) { // 保存token和用户信息 - if (response.data['data'] != null) { - final userData = response.data['data']; - if (userData['token'] != null) { + if (response.data.data != null) { + final userData = response.data.data as Map; + if (userData.containsKey('token')) { await storage.write('token', userData['token']); } // 保存用户信息 @@ -119,7 +120,7 @@ class LoginController extends GetxController { // 登录成功,跳转到首页 Get.offAllNamed('/main'); } else { - SmartDialog.showToast(response.data?['message'] ?? '登录失败,请重试'); + SmartDialog.showToast(response.data.message); } } catch (e) { SmartDialog.showToast('网络请求失败,请检查网络连接'); diff --git a/lib/pages/mine/login_page.dart b/lib/pages/mine/login_page.dart index 6ca5f17..71f5fc7 100644 --- a/lib/pages/mine/login_page.dart +++ b/lib/pages/mine/login_page.dart @@ -13,7 +13,7 @@ class LoginPage extends StatelessWidget { @override Widget build(BuildContext context) { - return GetBuilder( + return GetX( init: LoginController(), builder: (controller) { return Scaffold(