From 633d2c5e5c4955f4a893b85a00eaca43e4b0a136 Mon Sep 17 00:00:00 2001 From: Dayron Date: Mon, 20 Oct 2025 17:51:16 +0200 Subject: [PATCH] feat: Simplify message state management by removing intermediate states and updating UI logic --- lib/blocs/message/message_bloc.dart | 89 ++------------------ lib/blocs/message/message_state.dart | 16 ---- lib/components/group/chat_group_content.dart | 39 ++------- 3 files changed, 17 insertions(+), 127 deletions(-) diff --git a/lib/blocs/message/message_bloc.dart b/lib/blocs/message/message_bloc.dart index a619d5c..37eb016 100644 --- a/lib/blocs/message/message_bloc.dart +++ b/lib/blocs/message/message_bloc.dart @@ -55,31 +55,16 @@ class MessageBloc extends Bloc { SendMessage event, Emitter emit, ) async { - final currentState = state; - try { - emit(MessageSending()); - + // Juste effectuer l'action, le stream mettra à jour await _messageService.sendMessage( groupId: event.groupId, text: event.text, senderId: event.senderId, senderName: event.senderName, ); - - emit(MessageSent()); - - // Retourner à l'état précédent si c'était MessagesLoaded - if (currentState is MessagesLoaded) { - emit(currentState); - } } catch (e) { emit(MessageError('Erreur lors de l\'envoi du message: $e')); - - // Retourner à l'état précédent - if (currentState is MessagesLoaded) { - emit(currentState); - } } } @@ -87,29 +72,15 @@ class MessageBloc extends Bloc { DeleteMessage event, Emitter emit, ) async { - final currentState = state; - try { - emit(MessageDeleting()); - + // Ne pas émettre d'état, juste effectuer l'action + // Le stream Firestore mettra à jour automatiquement await _messageService.deleteMessage( groupId: event.groupId, messageId: event.messageId, ); - - emit(MessageDeleted()); - - // Retourner à l'état précédent si c'était MessagesLoaded - if (currentState is MessagesLoaded) { - emit(currentState); - } } catch (e) { emit(MessageError('Erreur lors de la suppression du message: $e')); - - // Retourner à l'état précédent - if (currentState is MessagesLoaded) { - emit(currentState); - } } } @@ -117,30 +88,16 @@ class MessageBloc extends Bloc { UpdateMessage event, Emitter emit, ) async { - final currentState = state; - try { - emit(MessageUpdating()); - + // Ne pas émettre d'état, juste effectuer l'action + // Le stream Firestore mettra à jour automatiquement await _messageService.updateMessage( groupId: event.groupId, messageId: event.messageId, newText: event.newText, ); - - emit(MessageUpdated()); - - // Retourner à l'état précédent si c'était MessagesLoaded - if (currentState is MessagesLoaded) { - emit(currentState); - } } catch (e) { emit(MessageError('Erreur lors de la modification du message: $e')); - - // Retourner à l'état précédent - if (currentState is MessagesLoaded) { - emit(currentState); - } } } @@ -148,31 +105,17 @@ class MessageBloc extends Bloc { ReactToMessage event, Emitter emit, ) async { - final currentState = state; - try { - emit(MessageReacting()); - + // Ne pas émettre d'état, juste effectuer l'action + // Le stream Firestore mettra à jour automatiquement await _messageService.reactToMessage( groupId: event.groupId, messageId: event.messageId, userId: event.userId, reaction: event.reaction, ); - - emit(MessageReacted()); - - // Retourner à l'état précédent si c'était MessagesLoaded - if (currentState is MessagesLoaded) { - emit(currentState); - } } catch (e) { emit(MessageError('Erreur lors de l\'ajout de la réaction: $e')); - - // Retourner à l'état précédent - if (currentState is MessagesLoaded) { - emit(currentState); - } } } @@ -180,30 +123,16 @@ class MessageBloc extends Bloc { RemoveReaction event, Emitter emit, ) async { - final currentState = state; - try { - emit(MessageReacting()); - + // Ne pas émettre d'état, juste effectuer l'action + // Le stream Firestore mettra à jour automatiquement await _messageService.removeReaction( groupId: event.groupId, messageId: event.messageId, userId: event.userId, ); - - emit(MessageReacted()); - - // Retourner à l'état précédent si c'était MessagesLoaded - if (currentState is MessagesLoaded) { - emit(currentState); - } } catch (e) { emit(MessageError('Erreur lors de la suppression de la réaction: $e')); - - // Retourner à l'état précédent - if (currentState is MessagesLoaded) { - emit(currentState); - } } } diff --git a/lib/blocs/message/message_state.dart b/lib/blocs/message/message_state.dart index 560fa07..597911e 100644 --- a/lib/blocs/message/message_state.dart +++ b/lib/blocs/message/message_state.dart @@ -25,22 +25,6 @@ class MessagesLoaded extends MessageState { List get props => [messages, groupId]; } -class MessageSending extends MessageState {} - -class MessageSent extends MessageState {} - -class MessageDeleting extends MessageState {} - -class MessageDeleted extends MessageState {} - -class MessageUpdating extends MessageState {} - -class MessageUpdated extends MessageState {} - -class MessageReacting extends MessageState {} - -class MessageReacted extends MessageState {} - class MessageError extends MessageState { final String message; diff --git a/lib/components/group/chat_group_content.dart b/lib/components/group/chat_group_content.dart index 09ec5f6..043df55 100644 --- a/lib/components/group/chat_group_content.dart +++ b/lib/components/group/chat_group_content.dart @@ -159,17 +159,6 @@ class _ChatGroupContentState extends State { backgroundColor: Colors.red, ), ); - } else if (state is MessageSent || state is MessageUpdated) { - // Scroller vers le bas après l'envoi - WidgetsBinding.instance.addPostFrameCallback((_) { - if (_scrollController.hasClients) { - _scrollController.animateTo( - _scrollController.position.maxScrollExtent, - duration: const Duration(milliseconds: 300), - curve: Curves.easeOut, - ); - } - }); } }, builder: (context, state) { @@ -277,26 +266,14 @@ class _ChatGroupContentState extends State { ), ), const SizedBox(width: 8), - BlocBuilder( - builder: (context, state) { - if (state is MessageSending || state is MessageUpdating) { - return Container( - width: 48, - height: 48, - padding: const EdgeInsets.all(12), - child: const CircularProgressIndicator(strokeWidth: 2), - ); - } - return IconButton( - onPressed: () => _sendMessage(currentUser), - icon: Icon(_editingMessage != null ? Icons.check : Icons.send), - style: IconButton.styleFrom( - backgroundColor: Theme.of(context).colorScheme.primary, - foregroundColor: Colors.white, - padding: const EdgeInsets.all(12), - ), - ); - }, + IconButton( + onPressed: () => _sendMessage(currentUser), + icon: Icon(_editingMessage != null ? Icons.check : Icons.send), + style: IconButton.styleFrom( + backgroundColor: Theme.of(context).colorScheme.primary, + foregroundColor: Colors.white, + padding: const EdgeInsets.all(12), + ), ), ], ),