- Updated Group, Trip, User, and other model classes to include comprehensive documentation for better understanding and maintainability. - Improved error handling and logging in services, including AuthService, ErrorService, and StorageService. - Added validation and business logic explanations in ExpenseService and TripService. - Refactored method comments to follow a consistent format across the codebase. - Translated error messages and comments from French to English for consistency.
159 lines
5.0 KiB
Dart
159 lines
5.0 KiB
Dart
/// 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.
|
|
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<Object?> 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<Group> groups;
|
|
|
|
/// Creates a GroupsLoaded state.
|
|
///
|
|
/// Args:
|
|
/// [groups]: The list of groups to include in this state
|
|
const GroupsLoaded(this.groups);
|
|
|
|
@override
|
|
List<Object?> 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<Group> 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<Object?> 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<Object?> 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<Object?> get props => [message];
|
|
} |