sendMessageStream method
Stream<String>
sendMessageStream({
- required String message,
- List<
ChatMessage> conversationHistory = const [], - Map<
String, dynamic> ? options,
override
Send a message and get a streaming response
Implementation
@override
Stream<String> sendMessageStream({
required String message,
List<ChatMessage> conversationHistory = const [],
Map<String, dynamic>? options,
}) async* {
final contents = _prepareContents(message, conversationHistory);
final request = http.Request('POST', Uri.parse(_streamUrl));
request.headers.addAll({'Content-Type': 'application/json'});
request.body = jsonEncode({
'contents': contents,
'generationConfig': {
'temperature': options?['temperature'] ?? temperature,
'maxOutputTokens': options?['maxTokens'] ?? maxTokens,
},
});
final response = await request.send();
final stream = response.stream.transform(utf8.decoder);
String fullResponse = '';
await for (var chunk in stream) {
final lines = chunk.split('\n');
for (var line in lines) {
if (line.isNotEmpty && line.trim().isNotEmpty) {
try {
final data = jsonDecode(line);
final content = data['candidates'][0]['content']['parts'][0]['text'];
if (content != null) {
fullResponse += content;
yield content;
}
} catch (e) {
// Skip invalid JSON
}
}
}
}
_conversationHistory.add({'role': 'user', 'content': message});
_conversationHistory.add({'role': 'model', 'content': fullResponse});
}