From b1e7adb1c56fb2768849e62451da41c4e296a0c9 Mon Sep 17 00:00:00 2001 From: wgh19 Date: Sat, 29 Jun 2024 19:15:58 +0800 Subject: [PATCH] verify response data --- lib/network/app_dio.dart | 46 ++++++++++++++++++++++++++++++++++++++-- 1 file changed, 44 insertions(+), 2 deletions(-) diff --git a/lib/network/app_dio.dart b/lib/network/app_dio.dart index 21d3a09..0439d2d 100644 --- a/lib/network/app_dio.dart +++ b/lib/network/app_dio.dart @@ -1,3 +1,4 @@ +import 'dart:convert'; import 'dart:io'; import 'package:dio/dio.dart'; @@ -109,12 +110,53 @@ class AppDio extends DioForNative { CancelToken? cancelToken, Options? options, ProgressCallback? onSendProgress, - ProgressCallback? onReceiveProgress}) { + ProgressCallback? onReceiveProgress}) async{ if (!isInitialized) { isInitialized = true; interceptors.add(MyLogInterceptor()); } - return super.request(path, + if(T == Map) { + var res = await super.request(path, + data: data, + queryParameters: queryParameters, + cancelToken: cancelToken, + options: options, + onSendProgress: onSendProgress, + onReceiveProgress: onReceiveProgress); + if(res.data == null) { + return Response( + data: null, + requestOptions: res.requestOptions, + statusCode: res.statusCode, + statusMessage: res.statusMessage, + isRedirect: res.isRedirect, + redirects: res.redirects, + extra: res.extra, + headers: res.headers + ); + } + try { + var json = jsonDecode(res.data!); + return Response( + data: json, + requestOptions: res.requestOptions, + statusCode: res.statusCode, + statusMessage: res.statusMessage, + isRedirect: res.isRedirect, + redirects: res.redirects, + extra: res.extra, + headers: res.headers + ); + } + catch(e) { + var data = res.data!; + if(data.length > 50) { + data = "${data.substring(0, 50)}..."; + } + throw "Failed to decode response: $e\n$data"; + } + } + return super.request(path, data: data, queryParameters: queryParameters, cancelToken: cancelToken,