Browse Source

增加获取验证码

ios
Jolie 4 months ago
parent
commit
cb4b722cca
7 changed files with 77 additions and 35 deletions
  1. 8
      lib/config/env_config.dart
  2. 12
      lib/network/api_urls.dart
  3. 2
      lib/network/network_config.dart
  4. 16
      lib/network/user_api.dart
  5. 57
      lib/network/user_api.g.dart
  6. 15
      lib/pages/mine/login_controller.dart
  7. 2
      lib/pages/mine/login_page.dart

8
lib/config/env_config.dart

@ -8,14 +8,14 @@ class EnvConfig {
//
static const Map<String, String> _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<String, String> _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/',
};
///

12
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端点
}

2
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:

16
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<HttpResponse<dynamic>> login(
@POST(ApiUrls.login)
Future<HttpResponse<BaseResponse<dynamic>>> login(
@Body() Map<String, dynamic> data,
);
@GET("user/info")
Future<HttpResponse<dynamic>> getUserInfo();
@GET(ApiUrls.getUserInfo)
Future<HttpResponse<BaseResponse<dynamic>>> getUserInfo();
@POST("dating-agency-uec/authorize/get/auth-captcha")
Future<HttpResponse<dynamic>> getVerificationCode(
@POST(ApiUrls.getVerificationCode)
Future<HttpResponse<BaseResponse<dynamic>>> getVerificationCode(
@Body() Map<String, dynamic> data,
);
}

57
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<HttpResponse<dynamic>> login(Map<String, dynamic> data) async {
Future<HttpResponse<BaseResponse<dynamic>>> login(
Map<String, dynamic> data,
) async {
final _extra = <String, dynamic>{};
final queryParameters = <String, dynamic>{};
final _headers = <String, dynamic>{};
final _data = <String, dynamic>{};
_data.addAll(data);
final _options = _setStreamType<HttpResponse<dynamic>>(
final _options = _setStreamType<HttpResponse<BaseResponse<dynamic>>>(
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<Map<String, dynamic>>(_options);
late BaseResponse<dynamic> _value;
try {
_value = BaseResponse<dynamic>.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<HttpResponse<dynamic>> getUserInfo() async {
Future<HttpResponse<BaseResponse<dynamic>>> getUserInfo() async {
final _extra = <String, dynamic>{};
final queryParameters = <String, dynamic>{};
final _headers = <String, dynamic>{};
const Map<String, dynamic>? _data = null;
final _options = _setStreamType<HttpResponse<dynamic>>(
final _options = _setStreamType<HttpResponse<BaseResponse<dynamic>>>(
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<Map<String, dynamic>>(_options);
late BaseResponse<dynamic> _value;
try {
_value = BaseResponse<dynamic>.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<HttpResponse<dynamic>> getVerificationCode(
Future<HttpResponse<BaseResponse<dynamic>>> getVerificationCode(
Map<String, dynamic> data,
) async {
final _extra = <String, dynamic>{};
@ -75,7 +93,7 @@ class _UserApi implements UserApi {
final _headers = <String, dynamic>{};
final _data = <String, dynamic>{};
_data.addAll(data);
final _options = _setStreamType<HttpResponse<dynamic>>(
final _options = _setStreamType<HttpResponse<BaseResponse<dynamic>>>(
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<Map<String, dynamic>>(_options);
late BaseResponse<dynamic> _value;
try {
_value = BaseResponse<dynamic>.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;
}

15
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<String, dynamic>;
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('网络请求失败,请检查网络连接');

2
lib/pages/mine/login_page.dart

@ -13,7 +13,7 @@ class LoginPage extends StatelessWidget {
@override
Widget build(BuildContext context) {
return GetBuilder<LoginController>(
return GetX<LoginController>(
init: LoginController(),
builder: (controller) {
return Scaffold(

Loading…
Cancel
Save