mirror of
https://github.com/foss42/apidash.git
synced 2025-08-06 13:51:20 +08:00
68 lines
2.0 KiB
Dart
68 lines
2.0 KiB
Dart
import 'package:flutter/material.dart';
|
|
import 'package:apidash_core/apidash_core.dart';
|
|
import 'package:apidash/models/models.dart';
|
|
import 'package:apidash/utils/utils.dart';
|
|
import 'package:apidash/consts.dart';
|
|
import 'error_message.dart';
|
|
import 'response_body_success.dart';
|
|
|
|
class ResponseBody extends StatelessWidget {
|
|
const ResponseBody({
|
|
super.key,
|
|
this.selectedRequestModel,
|
|
});
|
|
|
|
final RequestModel? selectedRequestModel;
|
|
|
|
@override
|
|
Widget build(BuildContext context) {
|
|
final responseModel = selectedRequestModel?.httpResponseModel;
|
|
if (responseModel == null) {
|
|
return const ErrorMessage(
|
|
message: '$kNullResponseModelError $kUnexpectedRaiseIssue');
|
|
}
|
|
|
|
var body = responseModel.body;
|
|
var formattedBody = responseModel.formattedBody;
|
|
if (body == null) {
|
|
return const ErrorMessage(
|
|
message: '$kMsgNullBody $kUnexpectedRaiseIssue');
|
|
}
|
|
if (body.isEmpty) {
|
|
return const ErrorMessage(
|
|
message: kMsgNoContent,
|
|
showIcon: false,
|
|
showIssueButton: false,
|
|
);
|
|
}
|
|
|
|
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;
|
|
var highlightLanguage = responseBodyView.$2;
|
|
|
|
if (formattedBody == null) {
|
|
options = [...options];
|
|
options.remove(ResponseBodyView.code);
|
|
}
|
|
|
|
return ResponseBodySuccess(
|
|
key: Key("${selectedRequestModel!.id}-response"),
|
|
mediaType: mediaType,
|
|
options: options,
|
|
bytes: responseModel.bodyBytes!,
|
|
body: body,
|
|
formattedBody: formattedBody,
|
|
highlightLanguage: highlightLanguage,
|
|
);
|
|
}
|
|
}
|