sendMessage method
Send a message
Implementation
Future<void> sendMessage(String content) async {
if (_client == null || _currentUser == null) {
_setError('Client or user not initialized');
return;
}
if (content.trim().isEmpty) return;
// Create user message
final userMessage = DifyMessage(
id: _uuid.v4(),
content: content,
role: MessageRole.user,
status: MessageStatus.sent,
timestamp: DateTime.now(),
conversationId: _currentConversation?.id,
userId: _currentUser!.id,
);
_messages.add(userMessage);
notifyListeners();
// Create assistant message placeholder
final assistantMessage = DifyMessage(
id: _uuid.v4(),
content: '',
role: MessageRole.assistant,
status: MessageStatus.sending,
timestamp: DateTime.now(),
conversationId: _currentConversation?.id,
userId: _currentUser!.id,
);
_messages.add(assistantMessage);
notifyListeners();
try {
await _client!.sendStreamingMessage(
message: content,
conversationId: _currentConversation?.id,
userId: _currentUser!.id,
onMessage: (message) {
// Update the assistant message
final index = _messages.indexWhere((m) => m.id == assistantMessage.id);
if (index != -1) {
_messages[index] = message.copyWith(
status: MessageStatus.sending,
);
notifyListeners();
}
},
onError: (error) {
_setError(error);
// Update message status to error
final index = _messages.indexWhere((m) => m.id == assistantMessage.id);
if (index != -1) {
_messages[index] = _messages[index].copyWith(
status: MessageStatus.error,
);
notifyListeners();
}
},
);
// Update final message status
final index = _messages.indexWhere((m) => m.id == assistantMessage.id);
if (index != -1) {
_messages[index] = _messages[index].copyWith(
status: MessageStatus.sent,
);
notifyListeners();
}
} catch (e) {
_setError('Failed to send message: $e');
// Update message status to error
final index = _messages.indexWhere((m) => m.id == assistantMessage.id);
if (index != -1) {
_messages[index] = _messages[index].copyWith(
status: MessageStatus.error,
);
notifyListeners();
}
}
}