/// States for group-related operations in the GroupBloc. /// /// This file defines all possible states that the GroupBloc can emit in response /// to group-related events. The states represent different phases of group /// operations including loading, success, error, and data states. /// /// State Categories: /// - **Initial State**: GroupInitial /// - **Loading States**: GroupLoading /// - **Success States**: GroupsLoaded, GroupLoaded, GroupCreated, GroupOperationSuccess /// - **Error States**: GroupError /// /// All states extend [GroupState] and implement [Equatable] for proper /// equality comparison and state change detection in the BLoC pattern. library; import 'package:equatable/equatable.dart'; import '../../models/group.dart'; /// Base class for all group-related states. /// /// All group states must extend this class and implement the [props] getter /// for proper equality comparison in the BLoC pattern. abstract class GroupState extends Equatable { const GroupState(); @override List get props => []; } // Initial state /// The initial state of the GroupBloc before any operations are performed. /// /// This is the default state when the bloc is first created and represents /// a clean slate with no group data loaded or operations in progress. class GroupInitial extends GroupState {} // Loading /// State indicating that a group operation is currently in progress. /// /// This state is emitted when the bloc is performing operations like /// loading groups, creating groups, or updating group information. /// UI components can use this state to show loading indicators. class GroupLoading extends GroupState {} // Groups loaded /// State containing a list of successfully loaded groups. /// /// This state is emitted when groups have been successfully retrieved /// from the repository, either through initial loading or real-time updates. /// The UI can use this data to display the list of available groups. /// /// Properties: /// [groups]: List of Group objects that were loaded class GroupsLoaded extends GroupState { /// The list of loaded groups final List groups; /// Creates a GroupsLoaded state. /// /// Args: /// [groups]: The list of groups to include in this state const GroupsLoaded(this.groups); @override List get props => [groups]; } /// Alternative state for loaded groups (used in some contexts). /// /// This state serves a similar purpose to GroupsLoaded but may be used /// in different contexts or for backward compatibility. /// /// Properties: /// [groups]: List of Group objects that were loaded class GroupLoaded extends GroupState { /// The list of loaded groups final List groups; /// Creates a GroupLoaded state. /// /// Args: /// [groups]: The list of groups to include in this state const GroupLoaded(this.groups); } /// State indicating successful group creation. /// /// This state is emitted when a new group has been successfully created. /// It contains the ID of the newly created group and an optional success message /// that can be displayed to the user. /// /// Properties: /// [groupId]: The unique identifier of the newly created group /// [message]: A success message to display to the user class GroupCreated extends GroupState { /// The unique identifier of the newly created group final String groupId; /// Success message for the user final String message; /// Creates a GroupCreated state. /// /// Args: /// [groupId]: The ID of the newly created group /// [message]: Optional success message (defaults to "Group created successfully") const GroupCreated({ required this.groupId, this.message = 'Group created successfully', }); @override List get props => [groupId, message]; } // Operation success /// State indicating successful completion of a group operation. /// /// This state is emitted when operations like updating, deleting, or /// member management have completed successfully. It contains a message /// that can be displayed to inform the user of the successful operation. /// /// Properties: /// [message]: A success message describing the completed operation class GroupOperationSuccess extends GroupState { /// The success message to display to the user final String message; /// Creates a GroupOperationSuccess state. /// /// Args: /// [message]: The success message to display const GroupOperationSuccess(this.message); @override List get props => [message]; } // Error /// State indicating that a group operation has failed. /// /// This state is emitted when any group operation encounters an error. /// 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 GroupError extends GroupState { /// The error message to display to the user final String message; /// Creates a GroupError state. /// /// Args: /// [message]: The error message to display const GroupError(this.message); @override List get props => [message]; }