Commit 99efc5739928718d1f975c739d9ab04cae2d1590
1 parent
993c1a04
兼容非json response header接口
Showing
3 changed files
with
25 additions
and
10 deletions
lib/common/core/user_util.dart
| @@ -45,6 +45,6 @@ class UserUtil { | @@ -45,6 +45,6 @@ class UserUtil { | ||
| 45 | 45 | ||
| 46 | static void logout() { | 46 | static void logout() { |
| 47 | clearUserSp(); | 47 | clearUserSp(); |
| 48 | - Navigator.of(AppRouter.context).push(AppRouteName.login as Route<Object?>); | 48 | + Navigator.of(AppRouter.context).pushNamedAndRemoveUntil(AppRouteName.login, (route) => false); |
| 49 | } | 49 | } |
| 50 | } | 50 | } |
lib/common/request/request_client.dart
| 1 | import 'dart:convert'; | 1 | import 'dart:convert'; |
| 2 | 2 | ||
| 3 | import 'package:dio/dio.dart'; | 3 | import 'package:dio/dio.dart'; |
| 4 | +import 'package:flutter/foundation.dart'; | ||
| 4 | import 'package:pretty_dio_logger/pretty_dio_logger.dart'; | 5 | import 'package:pretty_dio_logger/pretty_dio_logger.dart'; |
| 5 | 6 | ||
| 6 | import '../core/user_util.dart'; | 7 | import '../core/user_util.dart'; |
| @@ -18,7 +19,10 @@ class RequestClient { | @@ -18,7 +19,10 @@ class RequestClient { | ||
| 18 | RequestClient() { | 19 | RequestClient() { |
| 19 | _dio = Dio(BaseOptions(baseUrl: RequestConfig.baseUrl, connectTimeout: RequestConfig.connectTimeout)); | 20 | _dio = Dio(BaseOptions(baseUrl: RequestConfig.baseUrl, connectTimeout: RequestConfig.connectTimeout)); |
| 20 | _dio.interceptors.add(TokenInterceptor()); | 21 | _dio.interceptors.add(TokenInterceptor()); |
| 21 | - _dio.interceptors.add(PrettyDioLogger(requestHeader: true, requestBody: true)); | 22 | + if (kDebugMode) { |
| 23 | + _dio.interceptors | ||
| 24 | + .add(PrettyDioLogger(requestHeader: true, requestBody: true, responseHeader: true, maxWidth: 120)); | ||
| 25 | + } | ||
| 22 | } | 26 | } |
| 23 | 27 | ||
| 24 | Future<T?> request<T>( | 28 | Future<T?> request<T>( |
| @@ -38,10 +42,11 @@ class RequestClient { | @@ -38,10 +42,11 @@ class RequestClient { | ||
| 38 | data = _convertRequestData(data); | 42 | data = _convertRequestData(data); |
| 39 | 43 | ||
| 40 | Response response = await _dio.request(url, queryParameters: queryParameters, data: data, options: options); | 44 | Response response = await _dio.request(url, queryParameters: queryParameters, data: data, options: options); |
| 41 | - | 45 | + print("response.body type=${response.data.runtimeType}"); |
| 42 | return _handleResponse<T>(response, onResponse); | 46 | return _handleResponse<T>(response, onResponse); |
| 43 | } catch (e) { | 47 | } catch (e) { |
| 44 | - if ((e as ApiException?)?.code == 405) { | 48 | + print("e type=${e.runtimeType}"); |
| 49 | + if (e is ApiException && e.code == 405) { | ||
| 45 | UserUtil.logout(); | 50 | UserUtil.logout(); |
| 46 | return null; | 51 | return null; |
| 47 | } | 52 | } |
| @@ -143,12 +148,24 @@ class RequestClient { | @@ -143,12 +148,24 @@ class RequestClient { | ||
| 143 | raw.value = response.data; | 148 | raw.value = response.data; |
| 144 | return raw as T; | 149 | return raw as T; |
| 145 | } else { | 150 | } else { |
| 146 | - ApiResponse<T> apiResponse = ApiResponse<T>.fromJson(response.data); | 151 | + print('response.data.runtimeType=${response.data.runtimeType}'); |
| 152 | + | ||
| 153 | + // 应对response的header中content-type: [text/html;charset=utf-8]的情况 | ||
| 154 | + // 实际上都是json格式返回 | ||
| 155 | + Map<String, dynamic> json; | ||
| 156 | + if (response.data is String) { | ||
| 157 | + json = jsonDecode(response.data); | ||
| 158 | + } else { | ||
| 159 | + json = response.data; | ||
| 160 | + } | ||
| 161 | + //ApiResponse<T> apiResponse = ApiResponse<T>.fromJson(json.decode(response.data)); | ||
| 162 | + ApiResponse<T> apiResponse = ApiResponse.fromJson(json); | ||
| 147 | onResponse?.call(apiResponse); | 163 | onResponse?.call(apiResponse); |
| 148 | return _handleBusinessResponse<T>(apiResponse); | 164 | return _handleBusinessResponse<T>(apiResponse); |
| 149 | } | 165 | } |
| 150 | } else { | 166 | } else { |
| 151 | - var exception = ApiException(response.statusCode, ApiException.unknownException); | 167 | + ApiException exception = ApiException(response.statusCode, ApiException.unknownException); |
| 168 | + print("_handleResponse exception type=${exception.runtimeType}"); | ||
| 152 | throw exception; | 169 | throw exception; |
| 153 | } | 170 | } |
| 154 | } | 171 | } |
| @@ -158,7 +175,8 @@ class RequestClient { | @@ -158,7 +175,8 @@ class RequestClient { | ||
| 158 | if (response.code == RequestConfig.successCode) { | 175 | if (response.code == RequestConfig.successCode) { |
| 159 | return response.data; | 176 | return response.data; |
| 160 | } else { | 177 | } else { |
| 161 | - var exception = ApiException(response.code, response.msg); | 178 | + ApiException exception = ApiException(response.code, response.msg); |
| 179 | + print("_handleBusinessResponse exception type=${exception.runtimeType}"); | ||
| 162 | throw exception; | 180 | throw exception; |
| 163 | } | 181 | } |
| 164 | } | 182 | } |
lib/pages/login/loginpage/bloc/login_bloc.dart
| @@ -6,7 +6,6 @@ import 'package:flutter_easyloading/flutter_easyloading.dart'; | @@ -6,7 +6,6 @@ import 'package:flutter_easyloading/flutter_easyloading.dart'; | ||
| 6 | import 'package:wow_english/common/extension/string_extension.dart'; | 6 | import 'package:wow_english/common/extension/string_extension.dart'; |
| 7 | import 'package:wow_english/common/request/dao/user_dao.dart'; | 7 | import 'package:wow_english/common/request/dao/user_dao.dart'; |
| 8 | import 'package:wow_english/common/request/exception.dart'; | 8 | import 'package:wow_english/common/request/exception.dart'; |
| 9 | -import 'package:wow_english/common/request/request.dart'; | ||
| 10 | import 'package:wow_english/models/user_entity.dart'; | 9 | import 'package:wow_english/models/user_entity.dart'; |
| 11 | import 'package:wow_english/utils/loading.dart'; | 10 | import 'package:wow_english/utils/loading.dart'; |
| 12 | 11 | ||
| @@ -75,8 +74,6 @@ class LoginBloc extends Bloc<LoginEvent, LoginState> { | @@ -75,8 +74,6 @@ class LoginBloc extends Bloc<LoginEvent, LoginState> { | ||
| 75 | 74 | ||
| 76 | 75 | ||
| 77 | try { | 76 | try { |
| 78 | - request(() => null); | ||
| 79 | - | ||
| 80 | await loading(() async { | 77 | await loading(() async { |
| 81 | var user = await UserDao.login(phoneNumber, type, checkKey, checkNumber); | 78 | var user = await UserDao.login(phoneNumber, type, checkKey, checkNumber); |
| 82 | if (kDebugMode) { | 79 | if (kDebugMode) { |