send method

Future send()

Implementation

Future send() async {
  // print('my images :::: ${value.imageUrls}');
  final sid = UniqueKey().toString();
  textEditingController.clear();
  selectedImages.clear();

  value = value.copyWith(isLoading: true, messages: [
    ...?value.messages,
    Message(
        content: (value.imageUrls ?? []).isNotEmpty
            ? '${value.text?.trim() ?? ''}\n${value.imageUrls?.map((url) => '($url)\n').join(' ')}'
            : value.text?.trim() ?? '',
        status: 'sent',
        role: "user",
        createdAt: DateTime.now(),
        id: sid)
  ]);
  Future.delayed(const Duration(milliseconds: 500), () {
    scrollController.jumpTo(scrollController.position.maxScrollExtent);
  });
  var response = await _repository.sendChat(SendChatDto(
    session,
    (value.imageUrls ?? []).isNotEmpty
        ? '${value.text?.trim() ?? ''}\n${value.imageUrls?.map((url) => '($url)\n').join(' ')}'
        : value.text?.trim() ?? '',
  ));
  value = value.copyWith(imageUrls: [], text: '');
  if (response.isSuccessful && response.body != null) {
    var body = response.body!;
    if (body.replyMode == 'auto') {
      var messages =
          //  value.messages?.where((element) => (element.id != sid)).toList() ??
          //         [];
          value.messages
              ?.where((element) =>
                  (element.id != sid && element.id != body.reply?.id))
              .toList();
      // var messages =
      //     value.messages?.where((element) => (element.id != sid)).toList() ??
      //         [];
      // var responseExists =
      //     value.messages?.any((e) => e.id == body.message?[1].id) ?? false;
      // var response = responseExists
      //     ? value.messages?.map((e) => e.id == body.message?[1].id ? body.message : e)
      //     : [...?value.messages, body.message];

      value = value.copyWith(
          isLoading: false, messages: [...?messages, ...?body.message]);
      // value = value.copyWith(isLoading: false, messages: messages);
      // for (var item in [...?body.message]) {
      //   // if(!messages.any((element) => element.id == item.id)){
      //   //   messages.add(item);
      //   // }
      //   int existingMessageIndex =
      //       value.messages?.indexWhere((element) => element.id == item.id) ??
      //           -1;

      //   if (existingMessageIndex != -1) {
      //     value.messages?.removeAt(existingMessageIndex);
      //     value.messages?.insert(existingMessageIndex, item);
      //   } else {
      //     value.messages?.add(item);
      //   }
      // }
    }
    Future.delayed(const Duration(milliseconds: 500), () {
      scrollController.animateTo(scrollController.position.maxScrollExtent,
          duration: const Duration(milliseconds: 300),
          curve: Curves.decelerate);
    });
  } else {
    value = value.copyWith(isLoading: false);
  }
}