240 lines
7.9 KiB
Dart
240 lines
7.9 KiB
Dart
import 'package:bloc/bloc.dart';
|
|
import 'package:citycards_customer/itinerary_creation/repository/itinerary_repository.dart';
|
|
import 'package:citycards_customer/itinerary_creation/models/my_itinerary_model.dart';
|
|
import 'package:citycards_customer/localPreference/local_preference.dart';
|
|
import 'package:equatable/equatable.dart';
|
|
part 'get_itinerary_event.dart';
|
|
part 'get_itinerary_state.dart';
|
|
|
|
class GetItineraryBloc extends Bloc<GetItineraryEvent, GetItineraryState> {
|
|
final ItineraryRepository _repository;
|
|
|
|
GetItineraryBloc({ItineraryRepository? repository})
|
|
: _repository = repository ?? ItineraryRepository(),
|
|
super(GetItineraryInitial()) {
|
|
on<CheckLoginAndFetchItinerary>(_onCheckLoginAndFetch);
|
|
on<GetIiterary>(_onGetItinerary);
|
|
}
|
|
|
|
Future<void> _onCheckLoginAndFetch(
|
|
CheckLoginAndFetchItinerary event,
|
|
Emitter<GetItineraryState> emit,
|
|
) async {
|
|
try {
|
|
emit(GetItineraryLoading());
|
|
|
|
final isLoggedIn = await LocalPreference.getLogin();
|
|
|
|
if (!isLoggedIn) {
|
|
emit(GetItineraryNotLoggedIn());
|
|
return;
|
|
}
|
|
|
|
final response = await _repository.fetchMyItineraries();
|
|
|
|
// Check if user has unlimited pass
|
|
if (!response.isUnlimitedPass) {
|
|
emit(GetItineraryRequiresPass(itineraries: response.itineraries));
|
|
return;
|
|
}
|
|
|
|
emit(GetItinerarySuccessfully(itineraries: response.itineraries));
|
|
} catch (e) {
|
|
emit(GetItineraryFailed(
|
|
error: e.toString().contains('Exception')
|
|
? e.toString().replaceAll('Exception: ', '')
|
|
: "Failed to load itineraries. Please try again."));
|
|
}
|
|
}
|
|
|
|
Future<void> _onGetItinerary(
|
|
GetIiterary event,
|
|
Emitter<GetItineraryState> emit,
|
|
) async {
|
|
try {
|
|
emit(GetItineraryLoading());
|
|
|
|
final response = await _repository.fetchMyItineraries();
|
|
|
|
// Check if user has unlimited pass
|
|
if (!response.isUnlimitedPass) {
|
|
emit(GetItineraryRequiresPass(itineraries: response.itineraries));
|
|
return;
|
|
}
|
|
|
|
emit(GetItinerarySuccessfully(itineraries: response.itineraries));
|
|
} catch (e) {
|
|
emit(GetItineraryFailed(
|
|
error: e.toString().contains('Exception')
|
|
? e.toString().replaceAll('Exception: ', '')
|
|
: "Failed to load itineraries. Please try again."));
|
|
}
|
|
}
|
|
}
|
|
|
|
// import 'package:bloc/bloc.dart';
|
|
// import 'package:citycards_customer/itinerary_creation/repository/itinerary_repository.dart';
|
|
// import 'package:citycards_customer/itinerary_creation/models/my_itinerary_model.dart';
|
|
// import 'package:citycards_customer/localPreference/local_preference.dart';
|
|
// import 'package:equatable/equatable.dart';
|
|
// part 'get_itinerary_event.dart';
|
|
// part 'get_itinerary_state.dart';
|
|
//
|
|
// class GetItineraryBloc extends Bloc<GetItineraryEvent, GetItineraryState> {
|
|
// final ItineraryRepository _repository;
|
|
//
|
|
// GetItineraryBloc({ItineraryRepository? repository})
|
|
// : _repository = repository ?? ItineraryRepository(),
|
|
// super(GetItineraryInitial()) {
|
|
// on<CheckLoginAndFetchItinerary>(_onCheckLoginAndFetch);
|
|
// on<GetIiterary>(_onGetItinerary);
|
|
// }
|
|
//
|
|
// Future<void> _onCheckLoginAndFetch(
|
|
// CheckLoginAndFetchItinerary event,
|
|
// Emitter<GetItineraryState> emit,
|
|
// ) async {
|
|
// try {
|
|
// emit(GetItineraryLoading());
|
|
//
|
|
// final isLoggedIn = await LocalPreference.getLogin();
|
|
//
|
|
// if (!isLoggedIn) {
|
|
// emit(GetItineraryNotLoggedIn());
|
|
// return;
|
|
// }
|
|
//
|
|
// final response = await _repository.fetchMyItineraries();
|
|
//
|
|
// // Add static itinerary to the list
|
|
// final itinerariesWithStatic = [
|
|
// _createStaticItinerary(),
|
|
// ...response.itineraries,
|
|
// ];
|
|
//
|
|
// // Check if user has unlimited pass
|
|
// if (!response.isUnlimitedPass) {
|
|
// emit(GetItineraryRequiresPass(itineraries: itinerariesWithStatic));
|
|
// return;
|
|
// }
|
|
//
|
|
// emit(GetItinerarySuccessfully(itineraries: itinerariesWithStatic));
|
|
// } catch (e) {
|
|
// emit(GetItineraryFailed(
|
|
// error: e.toString().contains('Exception')
|
|
// ? e.toString().replaceAll('Exception: ', '')
|
|
// : "Failed to load itineraries. Please try again."));
|
|
// }
|
|
// }
|
|
//
|
|
// Future<void> _onGetItinerary(
|
|
// GetIiterary event,
|
|
// Emitter<GetItineraryState> emit,
|
|
// ) async {
|
|
// try {
|
|
// emit(GetItineraryLoading());
|
|
//
|
|
// final response = await _repository.fetchMyItineraries();
|
|
//
|
|
// // Add static itinerary to the list
|
|
// final itinerariesWithStatic = [
|
|
// _createStaticItinerary(),
|
|
// ...response.itineraries,
|
|
// ];
|
|
//
|
|
// // Check if user has unlimited pass
|
|
// if (!response.isUnlimitedPass) {
|
|
// emit(GetItineraryRequiresPass(itineraries: itinerariesWithStatic));
|
|
// return;
|
|
// }
|
|
//
|
|
// emit(GetItinerarySuccessfully(itineraries: itinerariesWithStatic));
|
|
// } catch (e) {
|
|
// emit(GetItineraryFailed(
|
|
// error: e.toString().contains('Exception')
|
|
// ? e.toString().replaceAll('Exception: ', '')
|
|
// : "Failed to load itineraries. Please try again."));
|
|
// }
|
|
// }
|
|
//
|
|
// // Helper method to create static/temporary itinerary
|
|
// MyItinerary _createStaticItinerary() {
|
|
// return MyItinerary(
|
|
// id: -1, // Negative ID to identify as static data
|
|
// userXid: 0,
|
|
// cityXid: 1,
|
|
// address: "Sample Location, City Center",
|
|
// latitude: 40.7128,
|
|
// longitude: -74.0060,
|
|
// tripEnergy: "Relaxed",
|
|
// travelingWithKids: false,
|
|
// dietaryPreferences: ["Vegetarian"],
|
|
// preferences: Preferences(
|
|
// shopping: 3,
|
|
// wildlife: 2,
|
|
// landmarks: 5,
|
|
// scenicViews: 4,
|
|
// artAndMuseums: 5,
|
|
// ),
|
|
// totalDays: 2,
|
|
// aiModel: "static-v1",
|
|
// promptVersion: "1.0",
|
|
// isActive: true,
|
|
// createdAt: DateTime.now().toIso8601String(),
|
|
// updatedAt: DateTime.now().toIso8601String(),
|
|
// days: [
|
|
// ItineraryDay(
|
|
// id: -1,
|
|
// itineraryXid: -1,
|
|
// dayNumber: 1,
|
|
// title: "Day 1: City Exploration",
|
|
// summary: "Explore the main attractions and local cuisine",
|
|
// items: [
|
|
// DayItem(
|
|
// id: -1,
|
|
// itineraryDayXid: -1,
|
|
// timeSlot: "09:00 AM",
|
|
// title: "Morning Coffee",
|
|
// description: "Start your day with a cup of local coffee",
|
|
// locationName: "Central Cafe",
|
|
// imageUrl: "https://via.placeholder.com/300",
|
|
// latitude: 40.7128,
|
|
// longitude: -74.0060,
|
|
// ),
|
|
// DayItem(
|
|
// id: -2,
|
|
// itineraryDayXid: -1,
|
|
// timeSlot: "11:00 AM",
|
|
// title: "Visit Historic Landmark",
|
|
// description: "Explore the city's most famous landmark",
|
|
// locationName: "City Monument",
|
|
// imageUrl: "https://via.placeholder.com/300",
|
|
// latitude: 40.7589,
|
|
// longitude: -73.9851,
|
|
// ),
|
|
// ],
|
|
// ),
|
|
// ItineraryDay(
|
|
// id: -2,
|
|
// itineraryXid: -1,
|
|
// dayNumber: 2,
|
|
// title: "Day 2: Museum & Parks",
|
|
// summary: "Discover art and nature",
|
|
// items: [
|
|
// DayItem(
|
|
// id: -3,
|
|
// itineraryDayXid: -2,
|
|
// timeSlot: "10:00 AM",
|
|
// title: "Art Museum Visit",
|
|
// description: "Immerse yourself in contemporary art",
|
|
// locationName: "Modern Art Museum",
|
|
// imageUrl: "https://via.placeholder.com/300",
|
|
// latitude: 40.7614,
|
|
// longitude: -73.9776,
|
|
// ),
|
|
// ],
|
|
// ),
|
|
// ],
|
|
// );
|
|
// }
|
|
// } |