Refactor ActivityCard UI and improve voting functionality

- Updated ActivityCard layout for better visual consistency and responsiveness.
- Simplified the category badge and adjusted styles for better readability.
- Enhanced the voting section with a progress bar and improved button designs.
- Added a new method in Activity model to check if all trip participants approved an activity.
- Improved error handling and validation in ActivityRepository for voting and fetching activities.
- Implemented pagination in ActivityPlacesService for activity searches.
- Removed outdated scripts for cleaning up duplicate images.
This commit is contained in:
Dayron
2025-11-04 20:21:54 +01:00
parent 8ff9e12fd4
commit f6c8432335
19 changed files with 2902 additions and 961 deletions

View File

@@ -0,0 +1,76 @@
import 'package:equatable/equatable.dart';
import '../../../models/activity.dart';
/// States pour les activités approuvées par tous les participants
abstract class ApprovedActivityState extends Equatable {
const ApprovedActivityState();
@override
List<Object?> get props => [];
}
/// État initial
class ApprovedActivityInitial extends ApprovedActivityState {
const ApprovedActivityInitial();
}
/// État de chargement
class ApprovedActivityLoading extends ApprovedActivityState {
const ApprovedActivityLoading();
}
/// État de recherche
class ApprovedActivitySearching extends ApprovedActivityState {
const ApprovedActivitySearching();
}
/// État avec les activités approuvées chargées
class ApprovedActivityLoaded extends ApprovedActivityState {
final List<Activity> approvedActivities;
final List<String> tripParticipants;
const ApprovedActivityLoaded({
required this.approvedActivities,
required this.tripParticipants,
});
@override
List<Object?> get props => [approvedActivities, tripParticipants];
/// Créer une copie avec des modifications
ApprovedActivityLoaded copyWith({
List<Activity>? approvedActivities,
List<String>? tripParticipants,
}) {
return ApprovedActivityLoaded(
approvedActivities: approvedActivities ?? this.approvedActivities,
tripParticipants: tripParticipants ?? this.tripParticipants,
);
}
}
/// État avec résultats de recherche approuvées
class ApprovedActivitySearchResults extends ApprovedActivityState {
final List<Activity> results;
final String query;
final List<String> tripParticipants;
const ApprovedActivitySearchResults({
required this.results,
required this.query,
required this.tripParticipants,
});
@override
List<Object?> get props => [results, query, tripParticipants];
}
/// État d'erreur
class ApprovedActivityError extends ApprovedActivityState {
final String message;
const ApprovedActivityError(this.message);
@override
List<Object?> get props => [message];
}