diff --git a/lib/common/core/user_util.dart b/lib/common/core/user_util.dart index 747490d..5b5f744 100644 --- a/lib/common/core/user_util.dart +++ b/lib/common/core/user_util.dart @@ -45,6 +45,6 @@ class UserUtil { static void logout() { clearUserSp(); - Navigator.of(AppRouter.context).push(AppRouteName.login as Route); + Navigator.of(AppRouter.context).pushNamedAndRemoveUntil(AppRouteName.login, (route) => false); } } diff --git a/lib/common/request/request_client.dart b/lib/common/request/request_client.dart index 5691d15..588e2a1 100644 --- a/lib/common/request/request_client.dart +++ b/lib/common/request/request_client.dart @@ -1,6 +1,7 @@ import 'dart:convert'; import 'package:dio/dio.dart'; +import 'package:flutter/foundation.dart'; import 'package:pretty_dio_logger/pretty_dio_logger.dart'; import '../core/user_util.dart'; @@ -18,7 +19,10 @@ class RequestClient { RequestClient() { _dio = Dio(BaseOptions(baseUrl: RequestConfig.baseUrl, connectTimeout: RequestConfig.connectTimeout)); _dio.interceptors.add(TokenInterceptor()); - _dio.interceptors.add(PrettyDioLogger(requestHeader: true, requestBody: true)); + if (kDebugMode) { + _dio.interceptors + .add(PrettyDioLogger(requestHeader: true, requestBody: true, responseHeader: true, maxWidth: 120)); + } } Future request( @@ -38,10 +42,11 @@ class RequestClient { data = _convertRequestData(data); Response response = await _dio.request(url, queryParameters: queryParameters, data: data, options: options); - + print("response.body type=${response.data.runtimeType}"); return _handleResponse(response, onResponse); } catch (e) { - if ((e as ApiException?)?.code == 405) { + print("e type=${e.runtimeType}"); + if (e is ApiException && e.code == 405) { UserUtil.logout(); return null; } @@ -143,12 +148,24 @@ class RequestClient { raw.value = response.data; return raw as T; } else { - ApiResponse apiResponse = ApiResponse.fromJson(response.data); + print('response.data.runtimeType=${response.data.runtimeType}'); + + // 应对response的header中content-type: [text/html;charset=utf-8]的情况 + // 实际上都是json格式返回 + Map json; + if (response.data is String) { + json = jsonDecode(response.data); + } else { + json = response.data; + } + //ApiResponse apiResponse = ApiResponse.fromJson(json.decode(response.data)); + ApiResponse apiResponse = ApiResponse.fromJson(json); onResponse?.call(apiResponse); return _handleBusinessResponse(apiResponse); } } else { - var exception = ApiException(response.statusCode, ApiException.unknownException); + ApiException exception = ApiException(response.statusCode, ApiException.unknownException); + print("_handleResponse exception type=${exception.runtimeType}"); throw exception; } } @@ -158,7 +175,8 @@ class RequestClient { if (response.code == RequestConfig.successCode) { return response.data; } else { - var exception = ApiException(response.code, response.msg); + ApiException exception = ApiException(response.code, response.msg); + print("_handleBusinessResponse exception type=${exception.runtimeType}"); throw exception; } } diff --git a/lib/pages/login/loginpage/bloc/login_bloc.dart b/lib/pages/login/loginpage/bloc/login_bloc.dart index 5562e14..8ce7cdc 100644 --- a/lib/pages/login/loginpage/bloc/login_bloc.dart +++ b/lib/pages/login/loginpage/bloc/login_bloc.dart @@ -6,7 +6,6 @@ import 'package:flutter_easyloading/flutter_easyloading.dart'; import 'package:wow_english/common/extension/string_extension.dart'; import 'package:wow_english/common/request/dao/user_dao.dart'; import 'package:wow_english/common/request/exception.dart'; -import 'package:wow_english/common/request/request.dart'; import 'package:wow_english/models/user_entity.dart'; import 'package:wow_english/utils/loading.dart'; @@ -75,8 +74,6 @@ class LoginBloc extends Bloc { try { - request(() => null); - await loading(() async { var user = await UserDao.login(phoneNumber, type, checkKey, checkNumber); if (kDebugMode) {