part of 'tour_bloc.dart'; abstract class TourState extends Equatable { const TourState(); @override List get props => []; } class TourInitial extends TourState {} class TourLoading extends TourState {} class ToursLoaded extends TourState { final List tours; final List completedTours; final List allTours; final Tour? selectedTour; final List? selectedTourObjects; final TourStatistics? selectedTourStats; final bool isSyncing; final bool isLoadingDetails; final bool showCompleted; const ToursLoaded({ required this.tours, this.completedTours = const [], required this.allTours, this.selectedTour, this.selectedTourObjects, this.selectedTourStats, this.isSyncing = false, this.isLoadingDetails = false, this.showCompleted = true, }); ToursLoaded copyWith({ List? tours, List? completedTours, List? allTours, Tour? selectedTour, List? selectedTourObjects, TourStatistics? selectedTourStats, bool? isSyncing, bool? isLoadingDetails, bool? showCompleted, }) { return ToursLoaded( tours: tours ?? this.tours, completedTours: completedTours ?? this.completedTours, allTours: allTours ?? this.allTours, selectedTour: selectedTour ?? this.selectedTour, selectedTourObjects: selectedTourObjects ?? this.selectedTourObjects, selectedTourStats: selectedTourStats ?? this.selectedTourStats, isSyncing: isSyncing ?? this.isSyncing, isLoadingDetails: isLoadingDetails ?? this.isLoadingDetails, showCompleted: showCompleted ?? this.showCompleted, ); } int get completedCount => completedTours.length; int get totalCount => allTours.length; double get completionPercentage => totalCount > 0 ? (completedCount / totalCount) * 100 : 0; @override List get props => [ tours, completedTours, allTours, selectedTour, selectedTourObjects, selectedTourStats, isSyncing, isLoadingDetails, showCompleted, ]; } class TourError extends TourState { final String message; const TourError({required this.message}); @override List get props => [message]; } class SyncError extends TourState { final String message; const SyncError({required this.message}); @override List get props => [message]; }