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 = { 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 = { 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) { void onError(DioException err, ErrorInterceptorHandler handler) {
// //
String errorMessage = '网络请求失败'; String errorMessage = '网络请求失败';
print('DioError: ${err.message}');
switch (err.type) { switch (err.type) {
case DioExceptionType.connectionTimeout: case DioExceptionType.connectionTimeout:
case DioExceptionType.sendTimeout: 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:retrofit/retrofit.dart';
import 'package:dio/dio.dart'; import 'package:dio/dio.dart';
part 'user_api.g.dart'; part 'user_api.g.dart';
@RestApi(baseUrl: 'https://api.example.com/')
@RestApi(baseUrl: '')
abstract class UserApi { abstract class UserApi {
factory UserApi(Dio dio) = _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, @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, @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 // 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 { 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; final Dio _dio;
@ -22,13 +20,15 @@ class _UserApi implements UserApi {
final ParseErrorLogger? errorLogger; final ParseErrorLogger? errorLogger;
@override @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 _extra = <String, dynamic>{};
final queryParameters = <String, dynamic>{}; final queryParameters = <String, dynamic>{};
final _headers = <String, dynamic>{}; final _headers = <String, dynamic>{};
final _data = <String, dynamic>{}; final _data = <String, dynamic>{};
_data.addAll(data); _data.addAll(data);
final _options = _setStreamType<HttpResponse<dynamic>>(
final _options = _setStreamType<HttpResponse<BaseResponse<dynamic>>>(
Options(method: 'POST', headers: _headers, extra: _extra) Options(method: 'POST', headers: _headers, extra: _extra)
.compose( .compose(
_dio.options, _dio.options,
@ -38,19 +38,28 @@ class _UserApi implements UserApi {
) )
.copyWith(baseUrl: _combineBaseUrls(_dio.options.baseUrl, baseUrl)), .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); final httpResponse = HttpResponse(_value, _result);
return httpResponse; return httpResponse;
} }
@override @override
Future<HttpResponse<dynamic>> getUserInfo() async {
Future<HttpResponse<BaseResponse<dynamic>>> getUserInfo() async {
final _extra = <String, dynamic>{}; final _extra = <String, dynamic>{};
final queryParameters = <String, dynamic>{}; final queryParameters = <String, dynamic>{};
final _headers = <String, dynamic>{}; final _headers = <String, dynamic>{};
const Map<String, dynamic>? _data = null; const Map<String, dynamic>? _data = null;
final _options = _setStreamType<HttpResponse<dynamic>>(
final _options = _setStreamType<HttpResponse<BaseResponse<dynamic>>>(
Options(method: 'GET', headers: _headers, extra: _extra) Options(method: 'GET', headers: _headers, extra: _extra)
.compose( .compose(
_dio.options, _dio.options,
@ -60,14 +69,23 @@ class _UserApi implements UserApi {
) )
.copyWith(baseUrl: _combineBaseUrls(_dio.options.baseUrl, baseUrl)), .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); final httpResponse = HttpResponse(_value, _result);
return httpResponse; return httpResponse;
} }
@override @override
Future<HttpResponse<dynamic>> getVerificationCode(
Future<HttpResponse<BaseResponse<dynamic>>> getVerificationCode(
Map<String, dynamic> data, Map<String, dynamic> data,
) async { ) async {
final _extra = <String, dynamic>{}; final _extra = <String, dynamic>{};
@ -75,7 +93,7 @@ class _UserApi implements UserApi {
final _headers = <String, dynamic>{}; final _headers = <String, dynamic>{};
final _data = <String, dynamic>{}; final _data = <String, dynamic>{};
_data.addAll(data); _data.addAll(data);
final _options = _setStreamType<HttpResponse<dynamic>>(
final _options = _setStreamType<HttpResponse<BaseResponse<dynamic>>>(
Options(method: 'POST', headers: _headers, extra: _extra) Options(method: 'POST', headers: _headers, extra: _extra)
.compose( .compose(
_dio.options, _dio.options,
@ -85,8 +103,17 @@ class _UserApi implements UserApi {
) )
.copyWith(baseUrl: _combineBaseUrls(_dio.options.baseUrl, baseUrl)), .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); final httpResponse = HttpResponse(_value, _result);
return httpResponse; return httpResponse;
} }

15
lib/pages/mine/login_controller.dart

@ -50,11 +50,12 @@ class LoginController extends GetxController {
final response = await _userApi.getVerificationCode(params); final response = await _userApi.getVerificationCode(params);
// //
if (response.data != null && response.data['code'] == 0) {
if (response.data.isSuccess) {
print('验证码发送成功');
// //
startCountdown(); startCountdown();
} else { } else {
SmartDialog.showToast(response.data?['message'] ?? '获取验证码失败');
SmartDialog.showToast(response.data.message);
} }
} catch (e) { } catch (e) {
SmartDialog.showToast('网络请求失败,请重试'); SmartDialog.showToast('网络请求失败,请重试');
@ -105,11 +106,11 @@ class LoginController extends GetxController {
final response = await _userApi.login(params); final response = await _userApi.login(params);
// //
if (response.data != null && response.data['code'] == 0) {
if (response.data.isSuccess) {
// token和用户信息 // 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']); await storage.write('token', userData['token']);
} }
// //
@ -119,7 +120,7 @@ class LoginController extends GetxController {
// //
Get.offAllNamed('/main'); Get.offAllNamed('/main');
} else { } else {
SmartDialog.showToast(response.data?['message'] ?? '登录失败,请重试');
SmartDialog.showToast(response.data.message);
} }
} catch (e) { } catch (e) {
SmartDialog.showToast('网络请求失败,请检查网络连接'); SmartDialog.showToast('网络请求失败,请检查网络连接');

2
lib/pages/mine/login_page.dart

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

Loading…
Cancel
Save