/// States for message-related operations in the MessageBloc. /// /// This file defines all possible states that the MessageBloc can emit in response /// to message-related events. The states represent different phases of message /// operations including loading, success, and error states for real-time chat functionality. /// /// State Categories: /// - **Initial State**: MessageInitial /// - **Loading States**: MessageLoading /// - **Success States**: MessagesLoaded /// - **Error States**: MessageError /// /// The states support real-time chat features including message streaming, /// reactions, editing, and deletion within group conversations. /// /// All states extend [MessageState] and implement [Equatable] for proper /// equality comparison and state change detection in the BLoC pattern. import 'package:equatable/equatable.dart'; import '../../models/message.dart'; /// Base class for all message-related states. /// /// All message states must extend this class and implement the [props] getter /// for proper equality comparison in the BLoC pattern. abstract class MessageState extends Equatable { const MessageState(); @override List get props => []; } /// The initial state of the MessageBloc before any operations are performed. /// /// This is the default state when the bloc is first created and represents /// a clean slate with no message data loaded or operations in progress. class MessageInitial extends MessageState {} /// State indicating that a message operation is currently in progress. /// /// This state is emitted when the bloc is performing operations like /// loading messages or initializing the real-time message stream. /// UI components can use this state to show loading indicators. class MessageLoading extends MessageState {} /// State containing a list of successfully loaded messages for a group. /// /// This state is emitted when messages have been successfully retrieved /// from the repository, either through initial loading or real-time updates. /// The state includes both the messages and the group ID for context. /// The UI can use this data to display the chat conversation. /// /// Properties: /// [messages]: List of Message objects in the conversation /// [groupId]: The unique identifier of the group these messages belong to class MessagesLoaded extends MessageState { /// The list of messages in the conversation final List messages; /// The unique identifier of the group final String groupId; /// Creates a MessagesLoaded state. /// /// Args: /// [messages]: The list of messages to include in this state /// [groupId]: The group ID these messages belong to const MessagesLoaded({ required this.messages, required this.groupId, }); @override List get props => [messages, groupId]; } /// State indicating that a message operation has failed. /// /// This state is emitted when any message operation encounters an error, /// such as failing to load messages, send a message, or perform other /// message-related operations. It contains an error message that can be /// displayed to the user to explain what went wrong. /// /// Properties: /// [message]: An error message describing what went wrong class MessageError extends MessageState { /// The error message to display to the user final String message; /// Creates a MessageError state. /// /// Args: /// [message]: The error message to display const MessageError(this.message); @override List get props => [message]; }