sendMessage method

Future<void> sendMessage(
  1. String content
)

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();
    }
  }
}