Commit 99efc5739928718d1f975c739d9ab04cae2d1590

Authored by Key
1 parent 993c1a04

兼容非json response header接口

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 &#39;package:flutter_easyloading/flutter_easyloading.dart&#39;; @@ -6,7 +6,6 @@ import &#39;package:flutter_easyloading/flutter_easyloading.dart&#39;;
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&lt;LoginEvent, LoginState&gt; { @@ -75,8 +74,6 @@ class LoginBloc extends Bloc&lt;LoginEvent, LoginState&gt; {
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) {