Refactor SSE response handling and display

Updated response body widgets to handle SSE output as a list of strings instead of a single string. Adjusted view options for SSE-related media types and refactored SSEDisplay to be a stateless widget that accepts a list of SSE events. This improves clarity and consistency in handling and displaying SSE responses.
This commit is contained in:
Ankit Mahato
2025-08-06 00:32:02 +05:30
parent ce2f98af07
commit d491f0540d
4 changed files with 32 additions and 31 deletions

View File

@@ -1,5 +1,3 @@
import 'dart:convert';
import 'package:flutter/material.dart';
import 'package:apidash_core/apidash_core.dart';
import 'package:apidash/models/models.dart';
@@ -24,6 +22,7 @@ class ResponseBody extends StatelessWidget {
message: '$kNullResponseModelError $kUnexpectedRaiseIssue');
}
final isSSE = responseModel.sseOutput?.isNotEmpty ?? false;
var body = responseModel.body;
var formattedBody = responseModel.formattedBody;
if (body == null) {
@@ -37,6 +36,9 @@ class ResponseBody extends StatelessWidget {
showIssueButton: false,
);
}
if (isSSE) {
body = responseModel.sseOutput!.join();
}
final mediaType =
responseModel.mediaType ?? MediaType(kTypeText, kSubTypePlain);
@@ -56,20 +58,6 @@ class ResponseBody extends StatelessWidget {
options.remove(ResponseBodyView.code);
}
// print('reM -> ${responseModel.sseOutput}');
if (responseModel.sseOutput?.isNotEmpty ?? false) {
// final modifiedBody = responseModel.sseOutput!.join('\n\n');
return ResponseBodySuccess(
key: Key("${selectedRequestModel!.id}-response"),
mediaType: MediaType('text', 'event-stream'),
options: [ResponseBodyView.sse, ResponseBodyView.raw],
bytes: utf8.encode((responseModel.sseOutput!).toString()),
body: jsonEncode(responseModel.sseOutput!),
formattedBody: responseModel.sseOutput!.join('\n'),
);
}
return ResponseBodySuccess(
key: Key("${selectedRequestModel!.id}-response"),
mediaType: mediaType,
@@ -77,6 +65,7 @@ class ResponseBody extends StatelessWidget {
bytes: responseModel.bodyBytes!,
body: body,
formattedBody: formattedBody,
sseOutput: responseModel.sseOutput,
highlightLanguage: highlightLanguage,
);
}