processAndEmitData function
Future<void>
processAndEmitData(
- StreamController controller,
- List<
String> dataLines, - dynamic onSuccess(),
- dynamic onError(),
Implementation
Future<void> processAndEmitData(
StreamController controller,
List<String> dataLines,
Function(ChatStreamResponse) onSuccess,
Function(String) onError) async {
for (String line in dataLines) {
if (line.isEmpty || !line.startsWith(streamResponseStart)) {
continue;
}
final String jsonData = line.substring(streamResponseStart.length);
if (jsonData.contains('statusCode')) {
controller.add(onError(jsonData));
continue;
}
if (jsonData.contains(streamResponseEnd)) {
debugPrint('Stream done');
controller.close();
return;
}
try {
final Map<String, dynamic> decoded = jsonDecode(jsonData);
final chatResponse = ChatStreamResponse.fromJson(decoded);
controller.add(onSuccess(chatResponse));
} catch (e) {
debugPrint('processAndEmitData $e');
}
}
}