diff --git a/lib/utils/http_utils.dart b/lib/utils/http_utils.dart index e323939a..e12f029f 100644 --- a/lib/utils/http_utils.dart +++ b/lib/utils/http_utils.dart @@ -101,33 +101,34 @@ String stripUrlParams(String url) { (List, String?) getResponseBodyViewOptions( MediaType? mediaType) { - if (mediaType != null) { - var type = mediaType.type; - var subtype = mediaType.subtype; - if (kResponseBodyViewOptions.containsKey(type)) { - if (kResponseBodyViewOptions[type]!.containsKey(subtype)) { - return ( - kResponseBodyViewOptions[type]![subtype]!, - kCodeHighlighterMap[subtype] ?? subtype - ); - } - if (subtype.contains(kSubTypeJson)) { - subtype = kSubTypeJson; - } - if (subtype.contains(kSubTypeXml)) { - subtype = kSubTypeXml; - } - if (kResponseBodyViewOptions[type]!.containsKey(subtype)) { - return ( - kResponseBodyViewOptions[type]![subtype]!, - kCodeHighlighterMap[subtype] ?? subtype - ); - } + if (mediaType == null) { + return (kRawBodyViewOptions, null); + } + var type = mediaType.type; + var subtype = mediaType.subtype; + if (kResponseBodyViewOptions.containsKey(type)) { + if (kResponseBodyViewOptions[type]!.containsKey(subtype)) { return ( - kResponseBodyViewOptions[type]![kSubTypeDefaultViewOptions]!, - subtype + kResponseBodyViewOptions[type]![subtype]!, + kCodeHighlighterMap[subtype] ?? subtype ); } + if (subtype.contains(kSubTypeJson)) { + subtype = kSubTypeJson; + } + if (subtype.contains(kSubTypeXml)) { + subtype = kSubTypeXml; + } + if (kResponseBodyViewOptions[type]!.containsKey(subtype)) { + return ( + kResponseBodyViewOptions[type]![subtype]!, + kCodeHighlighterMap[subtype] ?? subtype + ); + } + return ( + kResponseBodyViewOptions[type]![kSubTypeDefaultViewOptions]!, + subtype + ); } return (kNoBodyViewOptions, null); } diff --git a/lib/widgets/response_widgets.dart b/lib/widgets/response_widgets.dart index 42154478..7b269fc1 100644 --- a/lib/widgets/response_widgets.dart +++ b/lib/widgets/response_widgets.dart @@ -345,12 +345,14 @@ class ResponseBody extends StatelessWidget { ); } - var mediaType = responseModel.mediaType; - if (mediaType == null) { - return ErrorMessage( - message: - '$kMsgUnknowContentType - ${responseModel.contentType}. $kUnexpectedRaiseIssue'); - } + final mediaType = + responseModel.mediaType ?? MediaType(kTypeText, kSubTypePlain); + // Fix #415: Treat null Content-type as plain text instead of Error message + // if (mediaType == null) { + // return ErrorMessage( + // message: + // '$kMsgUnknowContentType - ${responseModel.contentType}. $kUnexpectedRaiseIssue'); + // } var responseBodyView = getResponseBodyViewOptions(mediaType); var options = responseBodyView.$1; diff --git a/test/widgets/response_widgets_test.dart b/test/widgets/response_widgets_test.dart index 1c3c4bef..74df9a1b 100644 --- a/test/widgets/response_widgets_test.dart +++ b/test/widgets/response_widgets_test.dart @@ -214,8 +214,13 @@ void main() { findsOneWidget); }); - testWidgets('Testing Response Body, no mediaType', (tester) async { - var responseModelNoHeaders = responseModel.copyWith(headers: null); + testWidgets( + 'Testing Response Body, no mediaType; shoud be default plaintext preview', + (tester) async { + var responseModelNoHeaders = responseModel.copyWith( + headers: null, + formattedBody: null, + ); var requestModelNoResponseHeaders = testRequestModel.copyWith(httpResponseModel: responseModelNoHeaders); @@ -230,10 +235,8 @@ void main() { ), ); - expect( - find.text( - 'Unknown Response Content-Type - ${responseModelNoHeaders.contentType}. $kUnexpectedRaiseIssue'), - findsOneWidget); + expect(find.text("Raw"), findsOneWidget); + expect(find.text('{"data":"world"}'), findsOneWidget); }); testWidgets('Testing Response Body for No body view', (tester) async {