sendMessage method

  1. @override
Future<String> sendMessage({
  1. required String message,
  2. List<ChatMessage> conversationHistory = const [],
  3. Map<String, dynamic>? options,
})
override

Send a message and get a complete response

Implementation

@override
Future<String> sendMessage({
  required String message,
  List<ChatMessage> conversationHistory = const [],
  Map<String, dynamic>? options,
}) async {
  final contents = _prepareContents(message, conversationHistory);

  final response = await http.post(
    Uri.parse(_baseUrl),
    headers: {'Content-Type': 'application/json'},
    body: jsonEncode({
      'contents': contents,
      'generationConfig': {
        'temperature': options?['temperature'] ?? temperature,
        'maxOutputTokens': options?['maxTokens'] ?? maxTokens,
      },
    }),
  );

  if (response.statusCode == 200) {
    final data = jsonDecode(response.body);
    final content = data['candidates'][0]['content']['parts'][0]['text'];

    _conversationHistory.add({'role': 'user', 'content': message});
    _conversationHistory.add({'role': 'model', 'content': content});

    return content;
  } else {
    throw Exception('Gemini API error: ${response.statusCode} - ${response.body}');
  }
}