- Added AddActivityBottomSheet for adding custom activities to trips. - Created Activity model to represent tourist activities. - Developed ActivityRepository for managing activities in Firestore. - Integrated ActivityPlacesService for searching activities via Google Places API. - Updated ShowTripDetailsContent to navigate to activities page. - Enhanced main.dart to include ActivityBloc and necessary repositories.
153 lines
3.3 KiB
Dart
153 lines
3.3 KiB
Dart
import 'package:equatable/equatable.dart';
|
|
import '../../models/activity.dart';
|
|
|
|
/// Base class for all activity-related events
|
|
abstract class ActivityEvent extends Equatable {
|
|
const ActivityEvent();
|
|
|
|
@override
|
|
List<Object?> get props => [];
|
|
}
|
|
|
|
/// Event to load activities for a specific trip
|
|
class LoadActivities extends ActivityEvent {
|
|
final String tripId;
|
|
|
|
const LoadActivities(this.tripId);
|
|
|
|
@override
|
|
List<Object> get props => [tripId];
|
|
}
|
|
|
|
/// Event to search activities using Google Places API
|
|
class SearchActivities extends ActivityEvent {
|
|
final String tripId;
|
|
final String destination;
|
|
final ActivityCategory? category;
|
|
|
|
const SearchActivities({
|
|
required this.tripId,
|
|
required this.destination,
|
|
this.category,
|
|
});
|
|
|
|
@override
|
|
List<Object?> get props => [tripId, destination, category];
|
|
}
|
|
|
|
/// Event to search activities by text query
|
|
class SearchActivitiesByText extends ActivityEvent {
|
|
final String tripId;
|
|
final String destination;
|
|
final String query;
|
|
|
|
const SearchActivitiesByText({
|
|
required this.tripId,
|
|
required this.destination,
|
|
required this.query,
|
|
});
|
|
|
|
@override
|
|
List<Object> get props => [tripId, destination, query];
|
|
}
|
|
|
|
/// Event to add a single activity to the trip
|
|
class AddActivity extends ActivityEvent {
|
|
final Activity activity;
|
|
|
|
const AddActivity(this.activity);
|
|
|
|
@override
|
|
List<Object> get props => [activity];
|
|
}
|
|
|
|
/// Event to add multiple activities at once
|
|
class AddActivitiesBatch extends ActivityEvent {
|
|
final List<Activity> activities;
|
|
|
|
const AddActivitiesBatch(this.activities);
|
|
|
|
@override
|
|
List<Object> get props => [activities];
|
|
}
|
|
|
|
/// Event to vote for an activity
|
|
class VoteForActivity extends ActivityEvent {
|
|
final String activityId;
|
|
final String userId;
|
|
final int vote; // 1 for positive, -1 for negative, 0 to remove vote
|
|
|
|
const VoteForActivity({
|
|
required this.activityId,
|
|
required this.userId,
|
|
required this.vote,
|
|
});
|
|
|
|
@override
|
|
List<Object> get props => [activityId, userId, vote];
|
|
}
|
|
|
|
/// Event to delete an activity
|
|
class DeleteActivity extends ActivityEvent {
|
|
final String activityId;
|
|
|
|
const DeleteActivity(this.activityId);
|
|
|
|
@override
|
|
List<Object> get props => [activityId];
|
|
}
|
|
|
|
/// Event to filter activities
|
|
class FilterActivities extends ActivityEvent {
|
|
final String? category;
|
|
final double? minRating;
|
|
final bool? showVotedOnly;
|
|
|
|
const FilterActivities({
|
|
this.category,
|
|
this.minRating,
|
|
this.showVotedOnly,
|
|
});
|
|
|
|
@override
|
|
List<Object?> get props => [category, minRating, showVotedOnly];
|
|
}
|
|
|
|
/// Event to refresh activities
|
|
class RefreshActivities extends ActivityEvent {
|
|
final String tripId;
|
|
|
|
const RefreshActivities(this.tripId);
|
|
|
|
@override
|
|
List<Object> get props => [tripId];
|
|
}
|
|
|
|
/// Event to clear search results
|
|
class ClearSearchResults extends ActivityEvent {
|
|
const ClearSearchResults();
|
|
}
|
|
|
|
/// Event to update activity details
|
|
class UpdateActivity extends ActivityEvent {
|
|
final Activity activity;
|
|
|
|
const UpdateActivity(this.activity);
|
|
|
|
@override
|
|
List<Object> get props => [activity];
|
|
}
|
|
|
|
/// Event to toggle favorite status
|
|
class ToggleActivityFavorite extends ActivityEvent {
|
|
final String activityId;
|
|
final String userId;
|
|
|
|
const ToggleActivityFavorite({
|
|
required this.activityId,
|
|
required this.userId,
|
|
});
|
|
|
|
@override
|
|
List<Object> get props => [activityId, userId];
|
|
} |