/// Events for trip-related operations in the TripBloc. /// /// This file defines all possible events that can be dispatched to the TripBloc /// to trigger trip-related state changes and operations such as loading trips, /// creating trips, updating trip information, and performing CRUD operations. /// /// Event Categories: /// - **Loading Events**: LoadTripsByUserId /// - **CRUD Operations**: TripCreateRequested, TripUpdateRequested, TripDeleteRequested /// - **State Management**: ResetTrips /// /// The events support complete trip lifecycle management with automatic /// list refreshing after operations to maintain UI consistency. /// /// All events extend [TripEvent] and implement [Equatable] for proper /// equality comparison in the BLoC pattern. library; import 'package:equatable/equatable.dart'; import '../../models/trip.dart'; /// Base class for all trip-related events. /// /// All trip events must extend this class and implement the [props] getter /// for proper equality comparison in the BLoC pattern. abstract class TripEvent extends Equatable { const TripEvent(); @override List get props => []; } /// Event to load all trips associated with a specific user. /// /// This event retrieves all trips where the user is a participant or organizer, /// providing a comprehensive view of the user's travel activities. The loading /// uses real-time streams to keep the trip list updated automatically. /// /// Args: /// [userId]: The unique identifier of the user whose trips should be loaded class LoadTripsByUserId extends TripEvent { /// The unique identifier of the user final String userId; /// Creates a LoadTripsByUserId event. /// /// Args: /// [userId]: The user ID to load trips for const LoadTripsByUserId({required this.userId}); @override List get props => [userId]; } /// Event to request creation of a new trip. /// /// This event creates a new trip with the provided information and automatically /// refreshes the user's trip list to show the newly created trip. The operation /// includes validation and proper error handling. /// /// Args: /// [trip]: The trip object containing all the trip information to create class TripCreateRequested extends TripEvent { /// The trip object to create final Trip trip; /// Creates a TripCreateRequested event. /// /// Args: /// [trip]: The trip object to create const TripCreateRequested({required this.trip}); @override List get props => [trip]; } /// Event to request updating an existing trip. /// /// This event updates an existing trip with new information and automatically /// refreshes the user's trip list to reflect the changes. The trip must have /// a valid ID for the update operation to succeed. /// /// Args: /// [trip]: The trip object with updated information (must include valid ID) class TripUpdateRequested extends TripEvent { /// The trip object with updated information final Trip trip; /// Creates a TripUpdateRequested event. /// /// Args: /// [trip]: The updated trip object (must have valid ID) const TripUpdateRequested({required this.trip}); @override List get props => [trip]; } /// Event to reset the trip state and clean up resources. /// /// This event resets the TripBloc to its initial state, cancels any active /// stream subscriptions, and clears the current user context. This is typically /// used during user logout or when switching between different user contexts. class ResetTrips extends TripEvent { /// Creates a ResetTrips event. const ResetTrips(); } /// Event to request deletion of a trip. /// /// This event permanently deletes a trip and all associated data including /// groups, expenses, and messages. This is a destructive operation that cannot /// be undone. The user's trip list is automatically refreshed after deletion. /// /// Args: /// [tripId]: The unique identifier of the trip to delete class TripDeleteRequested extends TripEvent { /// The unique identifier of the trip to delete final String tripId; /// Creates a TripDeleteRequested event. /// /// Args: /// [tripId]: The ID of the trip to delete const TripDeleteRequested({required this.tripId}); @override List get props => [tripId]; }