import 'package:bloc/bloc.dart'; import 'package:dio/dio.dart'; import 'package:equatable/equatable.dart'; import 'package:flutter/foundation.dart'; import 'package:hoshan/data/model/ai/messages_model.dart'; import 'package:hoshan/data/repository/chatbot_repository.dart'; part 'messages_event.dart'; part 'messages_state.dart'; class MessagesBloc extends Bloc { MessagesBloc() : super(MessagesInitial()) { on((event, emit) async { if (event is GetallMessages) { emit(MessagesLoading()); try { final response = await ChatbotRepository.getMessages(id: event.chatId); final updatedList = List.from(response.messages!); for (var i = 0; i < updatedList.length; i++) { try { updatedList[i].query = updatedList[i] .content ?.firstWhere( (element) => element.type == 'text', ) .text; if (updatedList[i].fromBot! && i > 0) { if (!updatedList[i - 1].fromBot!) { updatedList[i].query = updatedList[i - 1] .content ?.firstWhere( (element) => element.type == 'text', ) .text; } } } catch (e) { if (kDebugMode) { print('Query Error is: $e'); } } } if (updatedList.isEmpty) { emit(MessagesEmpty()); } else { emit(MessagesSuccess( isGetAll: true, messages: updatedList)); // Copy the current state } } on DioException catch (e) { emit(MessagesFail()); if (kDebugMode) { print("Dio Error is : $e"); } } } if (event is AddMessage) { final updatedList = List.from(state.messages); updatedList.add(event.message); emit(MessagesSuccess(messages: updatedList)); // Copy the current state } if (event is RemoveInError) { final updatedList = List.from(state.messages); updatedList.removeLast(); updatedList.removeLast(); emit(MessagesSuccess(messages: updatedList)); // Copy the current state } if (event is ChangeMessage) { final updatedList = List.from(state.messages); final index = updatedList.indexOf(event.oldMessage); updatedList[index] = event.newMessage; emit(MessagesSuccess(messages: updatedList)); // Copy the current state } if (event is DeleteMessage) { try { if (event.chatId != null) { await ChatbotRepository.deleteMessage( chatId: event.chatId!, messageId: event.message.id!); } final updatedList = List.from(state.messages); updatedList.remove(event.message); if (updatedList.isEmpty) { emit(MessagesEmpty()); } else { emit(MessagesSuccess(messages: updatedList)); } } catch (e) { if (kDebugMode) { print("Dio Error is : $e"); } } } if (event is DeleteMessageWithId) { try { final updatedList = List.from(state.messages); updatedList.removeWhere( (element) { return element.id == event.messageId; }, ); if (updatedList.isEmpty) { emit(MessagesEmpty()); } else { emit(MessagesSuccess(messages: updatedList)); } } catch (e) { if (kDebugMode) { print("Dio Error is : $e"); } } } if (event is ResetMessages) { emit(MessagesInitial()); } }); } }