sendMessage method

void sendMessage(
  1. String text, {
  2. bool displayMessage = true,
  3. bool action = false,
  4. String? session_id = null,
  5. String? language,
  6. dynamic payload,
})

Implementation

void sendMessage(String text, {bool displayMessage = true, bool action = false, String? session_id = null, String? language, dynamic payload}) async {

   _confettiController.play(); // Start confetti animation


  String? previousText = ''; // Store previously sent text here, if available

  String textToSend = text ?? previousText;
  _scrollToBottom();
  if (text.trim().isEmpty) return;
  if (textToSend == null || textToSend.isEmpty) {
//    print('No text available to send.');
    return;
  }
  if (displayMessage) {
    final userMessage = ResponseMessage(
      MessageType.user,
      DateTime.now(),
      text: text,
    );

    setState(() {
      _messages.add(userMessage);
      _isloading = true;  // Set loading to true
    });
    _controller.clear();
   _scrollToBottom();
  }

  final loadingMessage = ResponseMessage(
    MessageType.bot,
    DateTime.now(),
    customWidget: BubbleWidget(
      widget: Row(
        mainAxisSize: MainAxisSize.min,
        children: [
          Text(
            _agentName ??'HAIVA ',
            style: GoogleFonts.questrial(
              color: ColorTheme.accent,
              fontSize: 10,
              fontWeight: FontWeight.bold,
            ),
          ),
      Text(
       " ${_loadingStates[_currentIndex]}",
        style: GoogleFonts.questrial(
          color: ColorTheme.primary,
          fontSize: 10,
          fontWeight: FontWeight.bold,
        ),
      ),
          SizedBox(width: 8), // Spacing between text and loader
          Container(
            width: 15,
            height: 10,
            child: SpinKitThreeBounce(
              color: ColorTheme.primary,
              size: 10,
            ),
          ),
        ],
      ),
    ),
  );
  setState(() {
    _messages.add(loadingMessage);
  });
  String? finalTextToSend = text ?? _prevMessage;
  try {
    Map<String, dynamic>? formData;
    if (payload != null && payload is Map<String, dynamic>) {
      formData = payload;
    }
       final responseMessage = await HaivaService().haivaMessage(
           text,
           widget.agentId,
           isMarkdown: true,
           isButtonClicked: action,
           sessionId: _sessionId,
           language:_currentLocaleId,
       //  payloadType: 'form',
         payloadType: formData != null ? 'form' : 'text',
         formData: payload is Map<String, dynamic> ? payload : null,

       );

       setState(() {
         _sessionId = responseMessage.sessionId;
         _messages.removeLast();
         if(responseMessage.statusCode == 200){
           setState(() {
             _isOnline = true;
           });
         }
         else{
           setState(() {
             _isOnline = false;
           });
         }
         if (responseMessage.haivaMessage != null && responseMessage.haivaMessage!['welcomeMessage'] is List<dynamic>) {
           List<dynamic> welcomeMessagesList = responseMessage.haivaMessage!['welcomeMessage'] as List<dynamic>;

           welcomeMessages.clear(); // Clear previous messages
           for (var item in welcomeMessagesList) {
             if (item is Map<String, dynamic>) {
               WelcomeMessageData messageData = WelcomeMessageData.fromJson(item);
               welcomeMessages.add(messageData);
             }
           }
           if (welcomeMessages.isNotEmpty) {
             welcomemessagedata = welcomeMessages.first; // Set the first welcome message data
           }
         }
           _messages.add(responseMessage);

         _isloading = false;
               _sampleQuestions = responseMessage.haivaMessage?['showCustomQuestions']?['sampleQuestions'];
       });



  } catch (e) {
  //  print("Error: $e");
    setState(() {
      _isloading = false; // Ensure loading state is reset on error
    });
  }


}