Files
apidash/lib/widgets/response_body.dart
Ankit Mahato 7b7daa7dac Add AI request model support and improve type handling
Refactored collection state management to handle API type changes and AI request models. Updated widgets and tests to support nullable HTTP methods and AI request models, and improved response body rendering for AI responses.
2025-08-28 23:34:28 +05:30

77 lines
2.4 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');
}
final isSSE = responseModel.sseOutput?.isNotEmpty ?? false;
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,
);
}
if (isSSE) {
body = responseModel.sseOutput!.join();
}
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 = selectedRequestModel?.apiType == APIType.ai
? (kAnswerRawBodyViewOptions, kSubTypePlain)
: 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,
sseOutput: responseModel.sseOutput,
isAIResponse: selectedRequestModel?.apiType == APIType.ai,
aiRequestModel: selectedRequestModel?.aiRequestModel,
);
}
}