6177214e-ce7c-49e3-99de-ff9721b26f63 — Commit df27a564
Changed files
.../booking_details/bloc/booking_details_bloc.dart | 68 +++-- .../bloc/booking_details_cubit.dart | 277 +++++++++++++++++++++ .../bloc/booking_details_event.dart | 2 + .../bloc/booking_details_state.dart | 5 +- .../lib/booking_details/booking_details_page.dart | 30 +-- .../lib/booking_details/booking_details_route.dart | 5 +- .../components/booking_details_bottom_sheet.dart | 11 +- .../components/check_in_button.dart | 15 +- .../components/check_in_button_timer.dart | 9 +- .../components/check_out_button.dart | 5 +- .../components/concierge_button.dart | 8 +- .../components/get_keys_button.dart | 106 ++++---- .../components/housekeeping_button.dart | 17 +- .../components/preregister_button.dart | 7 +- .../components/room_number_container.dart | 4 +- .../booking_details/components/share_button.dart | 7 +- .../lib/check_in/bloc/check_in_state.dart | 2 +- .../lib/common/components/comwell_app_bar.dart | 1 + .../cubit/hotel_information_cubit.dart | 1 - .../lib/my_booking/my_booking_page.dart | 3 +- .../screens/concierge/concierge_route.dart | 10 +- .../components/catalog/service_catalog.dart | 10 +- comwell_key_app/lib/utils/navigation_utils.dart | 7 + 23 files changed, 473 insertions(+), 137 deletions(-)
Diff
diff --git a/comwell_key_app/lib/booking_details/bloc/booking_details_bloc.dart b/comwell_key_app/lib/booking_details/bloc/booking_details_bloc.dart
index 8f43ea5a..b5b032ba 100644
--- a/comwell_key_app/lib/booking_details/bloc/booking_details_bloc.dart
+++ b/comwell_key_app/lib/booking_details/bloc/booking_details_bloc.dart
@@ -1,5 +1,6 @@
import 'dart:async';
import 'package:bloc/bloc.dart';
+
import 'package:comwell_key_app/housekeeping/components/housekeeping_service.dart';
import 'package:comwell_key_app/housekeeping/housekeeping_repository.dart';
import 'package:comwell_key_app/housekeeping/models/housekeeping.dart';
@@ -26,21 +27,21 @@ class BookingDetailsBloc extends Bloc<BookingDetailsEvent, BookingDetailsState>
late Booking booking;
User? user;
Timer? _timer;
- final BookingDetailsRepository bookingDetailsRepository;
- final ProfileRepository profileRepository;
- final SeosRepository seosRepository;
- final UpSalesRepository upSaleRepository;
- final HouseKeepingRepository houseKeepingRepository;
- final ShareBookingRepository shareBookingRepository;
+ final BookingDetailsRepository _bookingDetailsRepository;
+ final ProfileRepository _profileRepository;
+ final SeosRepository _seosRepository;
+ final UpSalesRepository _upSaleRepository;
+ final HouseKeepingRepository _houseKeepingRepository;
+ final ShareBookingRepository _shareBookingRepository;
Duration _remainingTime = Duration.zero;
BookingDetailsBloc(
- this.bookingDetailsRepository,
- this.profileRepository,
- this.seosRepository,
- this.upSaleRepository,
- this.shareBookingRepository,
- this.houseKeepingRepository, {
+ this._bookingDetailsRepository,
+ this._profileRepository,
+ this._seosRepository,
+ this._upSaleRepository,
+ this._shareBookingRepository,
+ this._houseKeepingRepository, {
required this.booking,
}) : super(BookingDetailsState.initial(booking)) {
on<InitialEvent>((event, emit) async {
@@ -61,6 +62,12 @@ class BookingDetailsBloc extends Bloc<BookingDetailsEvent, BookingDetailsState>
}
});
+ on<GetKeysEvent>((event, emit) async {
+ emit(state.loading());
+ await checkMobileKeys(emit);
+ emit(state.loaded());
+ });
+
on<PreregisterEvent>((event, emit) async {
emit(state.loading());
await getBookingDetails(
@@ -142,13 +149,13 @@ class BookingDetailsBloc extends Bloc<BookingDetailsEvent, BookingDetailsState>
Future<void> getUpSales(Emitter<BookingDetailsState> emit, {bool fetchRemote = false}) async {
try {
if (fetchRemote) {
- final response = await upSaleRepository.getRemoteUpSales(
+ final response = await _upSaleRepository.getRemoteUpSales(
booking.confirmationNumber,
booking.hotelCode,
);
emit(state.getUpSales(response));
} else {
- final response = await upSaleRepository.getUpSales(
+ final response = await _upSaleRepository.getUpSales(
booking.confirmationNumber,
booking.hotelCode,
);
@@ -169,15 +176,15 @@ class BookingDetailsBloc extends Bloc<BookingDetailsEvent, BookingDetailsState>
emit(state.loading());
try {
if (fetchRemote) {
- final bookingDetails = await bookingDetailsRepository.getRemoteBookingDetails(
+ final bookingDetails = await _bookingDetailsRepository.getRemoteBookingDetails(
hmsConfirmationNumber,
hotelCode,
);
booking = bookingDetails;
return booking;
} else {
- user = await profileRepository.fetchProfileSettings();
- final bookingDetails = await bookingDetailsRepository.getBookingDetails(
+ user = await _profileRepository.fetchProfileSettings();
+ final bookingDetails = await _bookingDetailsRepository.getBookingDetails(
hmsConfirmationNumber,
hotelCode,
);
@@ -194,9 +201,9 @@ class BookingDetailsBloc extends Bloc<BookingDetailsEvent, BookingDetailsState>
Future<void> checkMobileKeys(Emitter<BookingDetailsState> emit) async {
try {
- final isEndPointSetup = await seosRepository.isEndpointSetup();
+ final isEndPointSetup = await _seosRepository.isEndpointSetup();
if (isEndPointSetup) {
- final keys = await seosRepository.refreshKeys();
+ final keys = await _seosRepository.refreshKeys();
emit(state.updateKeys(keys));
}
} catch (e) {
@@ -204,8 +211,25 @@ class BookingDetailsBloc extends Bloc<BookingDetailsEvent, BookingDetailsState>
}
}
+ Future<void> checkIfSetup() async {
+ final isSetup = await _seosRepository.isEndpointSetup();
+ if (!isSetup) await _seosRepository.startMobilePlugin();
+ }
+
+ Future<void> provisionKey(String hmsConfirmationNumber, String hotelCode) async {
+ await _seosRepository.provisionKey(bookingId: hmsConfirmationNumber, hotelCode: hotelCode);
+ }
+
+ Future<void> getKeys(String hmsConfirmationNumber, String hotelCode) async {
+ final keys = await _seosRepository.refreshKeys();
+ debugPrint("keys: $keys");
+ if (keys.isEmpty) {
+ throw Exception("Could not provision key for this booking");
+ }
+ }
+
Future<void> checkIfHouseKeepingOrdered(Emitter<BookingDetailsState> emit) async {
- final isHouseKeepingOrdered = await houseKeepingRepository.isHousesKeepingOrdered(
+ final isHouseKeepingOrdered = await _houseKeepingRepository.isHousesKeepingOrdered(
booking.roomNumber,
);
@@ -225,7 +249,7 @@ class BookingDetailsBloc extends Bloc<BookingDetailsEvent, BookingDetailsState>
.map((e) => HouseKeepingService.values.firstWhere((element) => element.name == e))
.toList(),
);
- await houseKeepingRepository.saveHouseKeepingOrdered(housekeeping);
+ await _houseKeepingRepository.saveHouseKeepingOrdered(housekeeping);
emit(state.houseKeepingOrdered());
}
@@ -309,6 +333,6 @@ class BookingDetailsBloc extends Bloc<BookingDetailsEvent, BookingDetailsState>
}
Future<void> getUser(Emitter<BookingDetailsState> emit, {bool fetchRemote = false}) async {
- user = await profileRepository.fetchProfileSettings(fetchRemote: fetchRemote);
+ user = await _profileRepository.fetchProfileSettings(fetchRemote: fetchRemote);
}
}
diff --git a/comwell_key_app/lib/booking_details/bloc/booking_details_cubit.dart b/comwell_key_app/lib/booking_details/bloc/booking_details_cubit.dart
new file mode 100644
index 00000000..e57d7f2b
--- /dev/null
+++ b/comwell_key_app/lib/booking_details/bloc/booking_details_cubit.dart
@@ -0,0 +1,277 @@
+import 'dart:async';
+
+import 'package:bloc/bloc.dart';
+import 'package:comwell_key_app/booking_details/bloc/booking_details_bloc.dart';
+import 'package:comwell_key_app/booking_details/booking_details_repository.dart';
+import 'package:comwell_key_app/housekeeping/components/housekeeping_service.dart';
+import 'package:comwell_key_app/housekeeping/housekeeping_repository.dart';
+import 'package:comwell_key_app/housekeeping/models/housekeeping.dart';
+import 'package:comwell_key_app/overview/models/booking.dart';
+import 'package:comwell_key_app/profile/profile_repository.dart';
+import 'package:comwell_key_app/profile_settings/model/user.dart';
+import 'package:comwell_key_app/share/share_booking_repository.dart';
+import 'package:comwell_key_app/up_sales/up_sales_repository.dart';
+import 'package:comwell_key_app/utils/seos_repository.dart';
+import 'package:flutter/foundation.dart';
+
+class BookingDetailsCubit extends Cubit<BookingDetailsState> {
+ late Booking booking;
+ User? user;
+ Timer? _timer;
+ final BookingDetailsRepository _bookingDetailsRepository;
+ final ProfileRepository _profileRepository;
+ final SeosRepository _seosRepository;
+ final UpSalesRepository _upSaleRepository;
+ final HouseKeepingRepository _houseKeepingRepository;
+ final ShareBookingRepository _shareBookingRepository;
+ Duration _remainingTime = Duration.zero;
+
+ BookingDetailsCubit(
+ this._bookingDetailsRepository,
+ this._profileRepository,
+ this._seosRepository,
+ this._upSaleRepository,
+ this._shareBookingRepository,
+ this._houseKeepingRepository, {
+ required this.booking,
+ }) : super(BookingDetailsState.initial(booking)) {
+ init();
+ }
+
+ Future<void> init() async {
+ try {
+ emit(state.loading());
+ await getUser();
+ _startTimer();
+ await checkIfHouseKeepingOrdered();
+ await checkMobileKeys();
+ await getBookingDetails(
+ booking.confirmationNumber,
+ hotelCode: booking.hotelCode,
+ fetchRemote: true,
+ );
+ await updateRemainingTime();
+ } catch (e) {
+ if (kDebugMode) print("err=$e");
+ emit(state.setupError());
+ } finally {
+ emit(state.main());
+ }
+ }
+
+ Future<void> getUpSales({bool fetchRemote = false}) async {
+ try {
+ if (fetchRemote) {
+ final response = await _upSaleRepository.getRemoteUpSales(
+ booking.confirmationNumber,
+ booking.hotelCode,
+ );
+ emit(state.getUpSales(response));
+ } else {
+ final response = await _upSaleRepository.getUpSales(
+ booking.confirmationNumber,
+ booking.hotelCode,
+ );
+ emit(state.getUpSales(response));
+ }
+ } catch (e) {
+ if (kDebugMode) print("err=$e");
+ emit(state.upSalesError());
+ }
+ }
+
+ Future<Booking> getBookingDetails(
+ String hmsConfirmationNumber, {
+ bool fetchRemote = false,
+ required String hotelCode,
+ }) async {
+ emit(state.loading());
+ try {
+ if (fetchRemote) {
+ final bookingDetails = await _bookingDetailsRepository.getRemoteBookingDetails(
+ hmsConfirmationNumber,
+ hotelCode,
+ );
+ booking = bookingDetails;
+ return booking;
+ } else {
+ user = await _profileRepository.fetchProfileSettings();
+ final bookingDetails = await _bookingDetailsRepository.getBookingDetails(
+ hmsConfirmationNumber,
+ hotelCode,
+ );
+ booking = bookingDetails;
+
+ return booking;
+ }
+ } catch (e) {
+ if (kDebugMode) print("err=$e");
+ emit(state.setupError());
+ rethrow;
+ }
+ }
+
+ Future<void> checkMobileKeys() async {
+ try {
+ final isKeyLoadedForBooking = state.keys.any((key) => key.label == booking.roomNumber);
+ emit(state.loadingKeys());
+ await checkIfSetup();
+
+ final keys = await _seosRepository.refreshKeys();
+ emit(state.updateKeys(keys));
+
+ if (keys.isEmpty || !isKeyLoadedForBooking) {
+ await _seosRepository.provisionKey(bookingId: booking.id, hotelCode: booking.hotelCode);
+ final keys = await _seosRepository.refreshKeys();
+ emit(state.updateKeys(keys));
+ }
+ } catch (e) {
+ emit(state.setupError());
+ }
+ }
+
+ Future<void> checkIfSetup() async {
+ final isSetup = await _seosRepository.isEndpointSetup();
+ if (!isSetup) await _seosRepository.startMobilePlugin();
+ }
+
+ Future<void> checkIfHouseKeepingOrdered() async {
+ final isHouseKeepingOrdered = await _houseKeepingRepository.isHousesKeepingOrdered(
+ booking.roomNumber,
+ );
+
+ if (isHouseKeepingOrdered) {
+ emit(state.houseKeepingOrdered());
+ }
+ }
+
+ Future<void> preregisterEvent() async {
+ try {
+ emit(state.loading());
+ await getBookingDetails(
+ booking.confirmationNumber,
+ fetchRemote: true,
+ hotelCode: booking.hotelCode,
+ );
+ await getUpSales(fetchRemote: true);
+ emit(state.main());
+ } catch (e) {
+ if (kDebugMode) print("err=$e");
+ emit(state.setupError());
+ }
+ }
+
+ Future<void> checkInEvent() async {
+ try {
+ emit(state.loading());
+ await getBookingDetails(
+ booking.confirmationNumber,
+ fetchRemote: true,
+ hotelCode: booking.hotelCode,
+ );
+ await checkMobileKeys();
+ await getUpSales(fetchRemote: true);
+ emit(state.main());
+ } catch (e) {
+ if (kDebugMode) print("err=$e");
+ emit(state.setupError());
+ }
+ }
+
+ Future<void> orderHouseKeeping(
+ List<String> selectedServices,
+ ) async {
+ final housekeeping = Housekeeping.toJson(
+ booking.hotelCode,
+ booking.roomNumber,
+ selectedServices
+ .map((e) => HouseKeepingService.values.firstWhere((element) => element.name == e))
+ .toList(),
+ );
+ await _houseKeepingRepository.saveHouseKeepingOrdered(housekeeping);
+ emit(state.houseKeepingOrdered());
+ }
+
+ Future<void> updateBooking(Booking booking) async {
+ try {
+ //TODO: add this when we have the backend
+ // await bookingDetailsRepository.updateBooking(event.booking);
+ emit(state.updateGuests(booking.guests));
+ } catch (e) {
+ emit(state.setupError());
+ }
+ }
+
+ void _startTimer() {
+ _timer?.cancel();
+ _timer = Timer.periodic(
+ const Duration(seconds: 1),
+ (_) => updateRemainingTime(),
+ );
+ }
+
+ @override
+ Future<void> close() {
+ _timer?.cancel();
+ return super.close();
+ }
+
+ Future<void> updateRemainingTime() async {
+ final now = DateTime.now();
+ _remainingTime = getCheckInTime().difference(now);
+
+ emit(state.updateRemainingTime(_remainingTime));
+
+ if (_remainingTime.isNegative) {
+ _timer?.cancel();
+ emit(state.updateRemainingTime(_remainingTime));
+ }
+ }
+
+ String get trimmedBalance {
+ final balance = booking.balance;
+ if (balance == null) return '';
+ if (balance == balance.toInt()) {
+ return balance.toInt().toString();
+ } else {
+ return balance.toStringAsFixed(2);
+ }
+ }
+
+ void bypassTimer() {
+ _timer?.cancel();
+ emit(state.updateRemainingTime(const Duration(seconds: -1)));
+ }
+
+ DateTime getCheckInTime() => booking.startDate.add(const Duration(hours: 15));
+ DateTime getCheckOutTime() => booking.endDate.add(const Duration(hours: 5));
+
+ bool get canCheckOut {
+ final now = DateTime.now();
+ final today = DateTime(now.year, now.month, now.day);
+ final checkInDate = DateTime(
+ booking.startDate.year,
+ booking.startDate.month,
+ booking.startDate.day,
+ );
+ final checkOutDate = DateTime(booking.endDate.year, booking.endDate.month, booking.endDate.day);
+
+ if (checkInDate == checkOutDate) {
+ return false;
+ }
+
+ return checkOutDate.isBefore(today);
+ }
+
+ bool get canOrderHousekeeping {
+ final now = DateTime.now();
+ final tomorrow = DateTime(now.year, now.month, now.day + 1);
+ final checkoutDay = DateTime(booking.endDate.year, booking.endDate.month, booking.endDate.day);
+ if (checkoutDay == tomorrow) return false;
+ return booking.endDate.difference(booking.startDate).inDays >= 2;
+ }
+
+ Future<void> getUser({bool fetchRemote = false}) async {
+ user = await _profileRepository.fetchProfileSettings(fetchRemote: fetchRemote);
+ }
+}
diff --git a/comwell_key_app/lib/booking_details/bloc/booking_details_event.dart b/comwell_key_app/lib/booking_details/bloc/booking_details_event.dart
index f557baa4..29b59ddb 100644
--- a/comwell_key_app/lib/booking_details/bloc/booking_details_event.dart
+++ b/comwell_key_app/lib/booking_details/bloc/booking_details_event.dart
@@ -45,6 +45,8 @@ final class GetUserEvent extends BookingDetailsEvent {
List<Object> get props => [fetchRemote];
}
+final class GetKeysEvent extends BookingDetailsEvent {}
+
final class CheckMobileKeys extends BookingDetailsEvent {}
final class UpdateRemainingEvent extends BookingDetailsEvent {
diff --git a/comwell_key_app/lib/booking_details/bloc/booking_details_state.dart b/comwell_key_app/lib/booking_details/bloc/booking_details_state.dart
index fea90081..f04a247f 100644
--- a/comwell_key_app/lib/booking_details/bloc/booking_details_state.dart
+++ b/comwell_key_app/lib/booking_details/bloc/booking_details_state.dart
@@ -47,6 +47,8 @@ class BookingDetailsState extends Equatable {
BookingDetailsState updateGuests(List<Guest> guests) =>
copyWith(status: BookingDetailsStatus.guestsUpdated, guests: guests);
+ BookingDetailsState loadingKeys() => copyWith(status: BookingDetailsStatus.loadingKeys);
+
BookingDetailsState loading() => copyWith(status: BookingDetailsStatus.loading, isLoading: true);
BookingDetailsState loaded() => copyWith(status: BookingDetailsStatus.loaded, isLoading: false);
@@ -61,7 +63,7 @@ class BookingDetailsState extends Equatable {
BookingDetailsState upSalesError() => copyWith(status: BookingDetailsStatus.upSalesError);
@override
- List<Object?> get props => [status, guests, isLoading, remainingTime, upSales];
+ List<Object?> get props => [status, guests, isLoading, remainingTime, upSales, keys, key];
BookingDetailsState copyWith({
BookingDetailsStatus? status,
@@ -99,6 +101,7 @@ enum BookingDetailsStatus {
setupError,
keysUpdated,
guestsUpdated,
+ loadingKeys,
main,
houseKeepingOrdered,
loading,
diff --git a/comwell_key_app/lib/booking_details/booking_details_page.dart b/comwell_key_app/lib/booking_details/booking_details_page.dart
index 33a342f9..64431f4f 100644
--- a/comwell_key_app/lib/booking_details/booking_details_page.dart
+++ b/comwell_key_app/lib/booking_details/booking_details_page.dart
@@ -1,3 +1,4 @@
+import 'package:comwell_key_app/booking_details/bloc/booking_details_cubit.dart';
import 'package:comwell_key_app/booking_details/components/booking_details_bottom_sheet.dart';
import 'package:comwell_key_app/booking_details/components/check_in_button_timer.dart';
import 'package:comwell_key_app/booking_details/components/get_keys_button.dart';
@@ -24,14 +25,10 @@ class BookingDetailsPage extends StatelessWidget {
@override
Widget build(BuildContext context) {
- return BlocConsumer<BookingDetailsBloc, BookingDetailsState>(
+ return BlocConsumer<BookingDetailsCubit, BookingDetailsState>(
listener: (context, state) {},
builder: (context, state) {
- final cubit = context.read<BookingDetailsBloc>();
-
- if (state.status == BookingDetailsStatus.initial) {
- cubit.add(const InitialEvent(fetchRemote: true));
- }
+ final cubit = context.read<BookingDetailsCubit>();
return Scaffold(
extendBodyBehindAppBar: true,
@@ -56,7 +53,7 @@ class BookingDetailsPage extends StatelessWidget {
Widget _buildBookingDetailsPage(
BuildContext context,
BookingDetailsState state,
- BookingDetailsBloc cubit,
+ BookingDetailsCubit cubit,
) {
final theme = Theme.of(context);
final screenHeight = MediaQuery.of(context).size.height;
@@ -112,13 +109,13 @@ class BookingDetailsPage extends StatelessWidget {
Widget _buildBookingDetailsInformation(
BuildContext context,
BookingDetailsState state,
- BookingDetailsBloc cubit,
+ BookingDetailsCubit cubit,
ThemeData theme,
) {
return InkWell(
onTap: () async {
await context.push(AppRoutes.myBooking, extra: cubit.booking);
- cubit.add(const InitialEvent(fetchRemote: true));
+
},
child: Container(
width: double.infinity,
@@ -174,7 +171,7 @@ class BookingDetailsPage extends StatelessWidget {
class _ScrollableBookingContent extends StatefulWidget {
final double screenHeight;
- final BookingDetailsBloc cubit;
+ final BookingDetailsCubit cubit;
final BookingDetailsState state;
final ThemeData theme;
final Widget Function() buildBookingDetailsInformation;
@@ -205,6 +202,11 @@ class _ScrollableBookingContentState extends State<_ScrollableBookingContent> {
@override
Widget build(BuildContext context) {
+ final keys = widget.state.keys;
+ final isKeyLoadedForBooking = keys.any((key) => key.label == widget.cubit.booking.roomNumber);
+ final isKeysEmpty = keys.isEmpty;
+ final hasRoomNumber = widget.cubit.booking.roomNumber != '';
+
return NotificationListener<ScrollNotification>(
onNotification: (notification) {
_onScroll(notification.metrics.pixels);
@@ -230,11 +232,9 @@ class _ScrollableBookingContentState extends State<_ScrollableBookingContent> {
child: Divider(color: colorDivider),
),
const SizedBox(height: 10),
- if (widget.state.keys.isNotEmpty &&
- widget.cubit.booking.roomNumber != '' &&
- widget.state.keys.any(
- (key) => key.label == widget.cubit.booking.roomNumber,
- ))
+ if (!isKeysEmpty &&
+ hasRoomNumber &&
+ isKeyLoadedForBooking)
UnlockRoomButton(roomNumber: widget.cubit.booking.roomNumber)
else if (widget.cubit.booking.reservationStatus == ReservationStatus.checkedin)
const GetKeysButton()
diff --git a/comwell_key_app/lib/booking_details/booking_details_route.dart b/comwell_key_app/lib/booking_details/booking_details_route.dart
index 65b1f618..9dfe7f3d 100644
--- a/comwell_key_app/lib/booking_details/booking_details_route.dart
+++ b/comwell_key_app/lib/booking_details/booking_details_route.dart
@@ -1,4 +1,5 @@
import 'package:comwell_key_app/booking_details/bloc/booking_details_bloc.dart';
+import 'package:comwell_key_app/booking_details/bloc/booking_details_cubit.dart';
import 'package:comwell_key_app/booking_details/booking_details_page.dart';
import 'package:comwell_key_app/find_booking/loading_page.dart';
import 'package:comwell_key_app/overview/cubit/overview_cubit.dart';
@@ -13,8 +14,8 @@ final bookingDetailsRoute = GoRoute(
path: AppRoutes.bookingDetails,
builder: (context, state) {
final booking = state.extra as Booking;
- return BlocProvider<BookingDetailsBloc>(
- create: (BuildContext context) => BookingDetailsBloc(
+ return BlocProvider<BookingDetailsCubit>(
+ create: (BuildContext context) => BookingDetailsCubit(
booking: booking,
locator(),
locator(),
diff --git a/comwell_key_app/lib/booking_details/components/booking_details_bottom_sheet.dart b/comwell_key_app/lib/booking_details/components/booking_details_bottom_sheet.dart
index 423491b7..e3be0476 100644
--- a/comwell_key_app/lib/booking_details/components/booking_details_bottom_sheet.dart
+++ b/comwell_key_app/lib/booking_details/components/booking_details_bottom_sheet.dart
@@ -1,4 +1,5 @@
import 'package:comwell_key_app/booking_details/bloc/booking_details_bloc.dart';
+import 'package:comwell_key_app/booking_details/bloc/booking_details_cubit.dart';
import 'package:comwell_key_app/booking_details/components/check_out_button.dart';
import 'package:comwell_key_app/booking_details/components/concierge_button.dart';
import 'package:comwell_key_app/booking_details/components/housekeeping_button.dart';
@@ -15,7 +16,7 @@ import 'package:flutter/material.dart';
import 'package:go_router/go_router.dart';
class BookingDetailsBottomSheet extends StatelessWidget {
- final BookingDetailsBloc cubit;
+ final BookingDetailsCubit cubit;
final BookingDetailsState state;
const BookingDetailsBottomSheet({super.key, required this.cubit, required this.state});
@@ -53,7 +54,7 @@ class BookingDetailsBottomSheet extends StatelessWidget {
child: CheckOutButton(),
),
if (cubit.booking.reservationStatus == ReservationStatus.checkedin &&
- cubit.isHouseKeepingTime)
+ cubit.canOrderHousekeeping)
Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
@@ -121,7 +122,7 @@ class BookingDetailsBottomSheet extends StatelessWidget {
ComwellClubContainer(
user: cubit.user!,
onSignupClick: () {
- cubit.add(const InitialEvent(fetchRemote: true));
+ cubit.init();
},
),
const SizedBox(height: 16),
@@ -189,7 +190,7 @@ class BookingDetailsBottomSheet extends StatelessWidget {
AppRoutes.upSalesCatalog,
extra: [cubit.booking],
);
- cubit.add(const InitialEvent());
+ cubit.init();
},
),
),
@@ -200,7 +201,7 @@ class BookingDetailsBottomSheet extends StatelessWidget {
const SizedBox(height: 16),
if (serviceUpgrades.isNotEmpty)
ServiceCatalog(
- bookingDetailsBloc: cubit,
+ bookingDetailsCubit: cubit,
booking: cubit.booking,
upSales: serviceUpgrades,
height: 252,
diff --git a/comwell_key_app/lib/booking_details/components/check_in_button.dart b/comwell_key_app/lib/booking_details/components/check_in_button.dart
index 9ee5b5f7..41f372b4 100644
--- a/comwell_key_app/lib/booking_details/components/check_in_button.dart
+++ b/comwell_key_app/lib/booking_details/components/check_in_button.dart
@@ -1,3 +1,4 @@
+import 'package:comwell_key_app/booking_details/bloc/booking_details_cubit.dart';
import 'package:comwell_key_app/utils/l10n_utils.dart';
import 'package:flutter/material.dart';
import 'package:flutter_bloc/flutter_bloc.dart';
@@ -13,20 +14,20 @@ class CheckInButton extends StatelessWidget {
@override
Widget build(BuildContext context) {
- final bloc = context.read<BookingDetailsBloc>();
- return bloc.booking.digitalCard
- ? getDigitalCardWidget(context, bloc)
+ final cubit = context.read<BookingDetailsCubit>();
+ return cubit.booking.digitalCard
+ ? getDigitalCardWidget(context, cubit)
: getPhysicalCardWidget(context);
}
- Widget getDigitalCardWidget(BuildContext context, BookingDetailsBloc bloc) {
+ Widget getDigitalCardWidget(BuildContext context, BookingDetailsCubit cubit) {
return Container(
margin: const EdgeInsets.symmetric(horizontal: 10),
child: ElevatedButton(
onPressed: () async {
- final (result) = await context.push(AppRoutes.checkIn, extra: [bloc.booking, false]);
- if (result == true && !bloc.isClosed) {
- bloc.add(CheckInEvent());
+ final (result) = await context.push(AppRoutes.checkIn, extra: [cubit.booking, false]);
+ if (result == true && !cubit.isClosed) {
+ cubit.checkInEvent();
}
},
child: Padding(
diff --git a/comwell_key_app/lib/booking_details/components/check_in_button_timer.dart b/comwell_key_app/lib/booking_details/components/check_in_button_timer.dart
index 0766241d..d6f6ae2e 100644
--- a/comwell_key_app/lib/booking_details/components/check_in_button_timer.dart
+++ b/comwell_key_app/lib/booking_details/components/check_in_button_timer.dart
@@ -1,5 +1,6 @@
import 'package:comwell_key_app/.generated/assets/assets.gen.dart';
import 'package:comwell_key_app/booking_details/bloc/booking_details_bloc.dart';
+import 'package:comwell_key_app/booking_details/bloc/booking_details_cubit.dart';
import 'package:comwell_key_app/booking_details/components/check_in_button.dart';
import 'package:comwell_key_app/themes/light_theme.dart';
import 'package:comwell_key_app/utils/l10n_utils.dart';
@@ -22,7 +23,7 @@ class CheckInButtonTimer extends StatefulWidget {
class _CheckInButtonTimerState extends State<CheckInButtonTimer> {
@override
Widget build(BuildContext context) {
- return BlocBuilder<BookingDetailsBloc, BookingDetailsState>(
+ return BlocBuilder<BookingDetailsCubit, BookingDetailsState>(
builder: (context, state) {
return AnimatedSwitcher(
duration: const Duration(milliseconds: 300),
@@ -46,10 +47,10 @@ class _CheckInButtonTimerState extends State<CheckInButtonTimer> {
}
Widget getTimerWidget() {
- return BlocBuilder<BookingDetailsBloc, BookingDetailsState>(
+ return BlocBuilder<BookingDetailsCubit, BookingDetailsState>(
key: const ValueKey('timer_view'),
builder: (context, state) {
- final cubit = context.read<BookingDetailsBloc>();
+ final cubit = context.read<BookingDetailsCubit>();
final (days, hours, minutes, seconds) = getDurationInMinutes(state.remainingTime);
final checkInTime = cubit.getCheckInTime();
final dateStr = DateFormat('d. MMM', 'da').format(checkInTime);
@@ -134,7 +135,7 @@ class _CheckInButtonTimerState extends State<CheckInButtonTimer> {
return GestureDetector(
onTap: () {
// Bypass timer in dev/stage - show check-in button
- cubit.add(const BypassTimerEvent());
+ cubit.bypassTimer();
},
child: timerContent,
);
diff --git a/comwell_key_app/lib/booking_details/components/check_out_button.dart b/comwell_key_app/lib/booking_details/components/check_out_button.dart
index 4d44524e..62c0a92d 100644
--- a/comwell_key_app/lib/booking_details/components/check_out_button.dart
+++ b/comwell_key_app/lib/booking_details/components/check_out_button.dart
@@ -1,4 +1,5 @@
import 'package:comwell_key_app/booking_details/bloc/booking_details_bloc.dart';
+import 'package:comwell_key_app/booking_details/bloc/booking_details_cubit.dart';
import 'package:comwell_key_app/routing/app_routes.dart';
import 'package:comwell_key_app/themes/light_theme.dart';
import 'package:comwell_key_app/utils/l10n_utils.dart';
@@ -12,7 +13,7 @@ class CheckOutButton extends StatelessWidget {
@override
Widget build(BuildContext context) {
- final cubit = context.read<BookingDetailsBloc>();
+ final cubit = context.read<BookingDetailsCubit>();
return Material(
color: Colors.transparent,
shape: RoundedRectangleBorder(
@@ -26,7 +27,7 @@ class CheckOutButton extends StatelessWidget {
onTap: () async {
await context.push(AppRoutes.checkOut,
extra: cubit.booking);
- cubit.add(const InitialEvent());
+ cubit.init();
},
child: Padding(
padding: const EdgeInsets.all(16.0),
diff --git a/comwell_key_app/lib/booking_details/components/concierge_button.dart b/comwell_key_app/lib/booking_details/components/concierge_button.dart
index f92515bc..22e45568 100644
--- a/comwell_key_app/lib/booking_details/components/concierge_button.dart
+++ b/comwell_key_app/lib/booking_details/components/concierge_button.dart
@@ -1,9 +1,9 @@
-import 'package:comwell_key_app/routing/app_routes.dart';
+
+import 'package:comwell_key_app/presentation/screens/concierge/concierge_route.dart';
import 'package:comwell_key_app/themes/light_theme.dart';
import 'package:comwell_key_app/utils/l10n_utils.dart';
import 'package:flutter/material.dart';
-import 'package:go_router/go_router.dart';
class ConciergeButton extends StatelessWidget {
final String hotelCode;
@@ -14,8 +14,8 @@ class ConciergeButton extends StatelessWidget {
final theme = Theme.of(context);
return GestureDetector(
- onTap: () {
- context.push(AppRoutes.concierge, extra: [hotelCode]);
+ onTap: () async {
+ await ConciergeRoute(hotelCode: hotelCode).push<void>(context);
},
child: Padding(
padding: const EdgeInsets.symmetric(horizontal: 16, vertical: 8),
diff --git a/comwell_key_app/lib/booking_details/components/get_keys_button.dart b/comwell_key_app/lib/booking_details/components/get_keys_button.dart
index 1759a5d7..023291c6 100644
--- a/comwell_key_app/lib/booking_details/components/get_keys_button.dart
+++ b/comwell_key_app/lib/booking_details/components/get_keys_button.dart
@@ -1,4 +1,5 @@
import 'package:comwell_key_app/booking_details/bloc/booking_details_bloc.dart';
+import 'package:comwell_key_app/booking_details/bloc/booking_details_cubit.dart';
import 'package:comwell_key_app/routing/app_routes.dart';
import 'package:comwell_key_app/themes/dark_theme.dart';
import 'package:comwell_key_app/utils/l10n_utils.dart';
@@ -12,58 +13,65 @@ class GetKeysButton extends StatelessWidget {
@override
Widget build(BuildContext context) {
- final bloc = context.read<BookingDetailsBloc>();
-
- return Container(
- margin: const EdgeInsets.symmetric(horizontal: 10),
- child: ElevatedButton(
- onPressed: () async {
- const bool onlyKeys = true;
- final (result) = await context.push(AppRoutes.checkIn, extra: [bloc.booking, onlyKeys],);
- if (result == true && !bloc.isClosed) {
- bloc.add(CheckInEvent());
- }
- },
- child: Padding(
- padding: const EdgeInsets.symmetric(vertical: 8.0),
- child: Row(
- children: [
- SvgPicture.asset(
- "assets/icons/Union.svg",
- colorFilter: const ColorFilter.mode(
- colorBackground,
- BlendMode.srcIn,
- ),
- width: 14,
- height: 14,
- ),
- const SizedBox(width: 16),
- Expanded(
- child: Column(
- crossAxisAlignment: CrossAxisAlignment.start,
- children: [
- Text(
- context.strings.get_keys,
- style: Theme.of(context)
- .textTheme
- .titleMedium
- ?.copyWith(color: Colors.white),
+ return BlocBuilder<BookingDetailsCubit, BookingDetailsState>(
+ builder: (context, state) {
+ final cubit = context.read<BookingDetailsCubit>();
+ final theme = Theme.of(context);
+ if (state.status == BookingDetailsStatus.loadingKeys) {
+ return const Center(
+ child: CircularProgressIndicator(
+ color: sandColor,
+ backgroundColor: colorBackground,
+ strokeWidth: 2,
+ ),
+ );
+ }
+ return Container(
+ margin: const EdgeInsets.symmetric(horizontal: 10),
+ child: ElevatedButton(
+ onPressed: () async {
+ await cubit.checkMobileKeys();
+ },
+ child: Padding(
+ padding: const EdgeInsets.symmetric(vertical: 8.0),
+ child: Row(
+ children: [
+ SvgPicture.asset(
+ "assets/icons/Union.svg",
+ colorFilter: const ColorFilter.mode(
+ colorBackground,
+ BlendMode.srcIn,
),
- Text(
- context.strings.get_keys_subtitle,
- style: Theme.of(context)
- .textTheme
- .bodySmall
- ?.copyWith(color: Colors.white),
- softWrap: true,
+ width: 14,
+ height: 14,
+ ),
+ const SizedBox(width: 16),
+ Expanded(
+ child: Column(
+ crossAxisAlignment: CrossAxisAlignment.start,
+ children: [
+ Text(
+ context.strings.get_keys,
+ style: Theme.of(
+ context,
+ ).textTheme.titleMedium?.copyWith(color: Colors.white),
+ ),
+ Text(
+ context.strings.get_keys_subtitle,
+ style: Theme.of(
+ context,
+ ).textTheme.bodySmall?.copyWith(color: Colors.white),
+ softWrap: true,
+ ),
+ ],
),
- ],
- ),
- )
- ],
+ ),
+ ],
+ ),
+ ),
),
- ),
- ),
+ );
+ },
);
}
}
diff --git a/comwell_key_app/lib/booking_details/components/housekeeping_button.dart b/comwell_key_app/lib/booking_details/components/housekeeping_button.dart
index 78bb54d1..1cf07b03 100644
--- a/comwell_key_app/lib/booking_details/components/housekeeping_button.dart
+++ b/comwell_key_app/lib/booking_details/components/housekeeping_button.dart
@@ -1,4 +1,5 @@
import 'package:comwell_key_app/.generated/assets/assets.gen.dart';
+import 'package:comwell_key_app/booking_details/bloc/booking_details_cubit.dart';
import 'package:comwell_key_app/overview/models/booking.dart';
import 'package:comwell_key_app/themes/light_theme.dart';
import 'package:comwell_key_app/utils/l10n_utils.dart';
@@ -17,7 +18,7 @@ class HousekeepingButton extends StatelessWidget {
@override
Widget build(BuildContext context) {
- final bloc = context.read<BookingDetailsBloc>();
+ final cubit = context.read<BookingDetailsCubit>();
return Material(
color: Colors.transparent,
@@ -30,13 +31,13 @@ class HousekeepingButton extends StatelessWidget {
child: InkWell(
borderRadius: BorderRadius.circular(10),
onTap: () async {
- if (bloc.state.isHouseKeepingOrdered) return;
+ if (cubit.state.isHouseKeepingOrdered) return;
final result = await context.push(AppRoutes.houseKeeping, extra: booking);
- if (result != null && !bloc.isClosed) {
- bloc.add(OrderHouseKeepingEvent(result as List<String>));
+ if (result != null && !cubit.isClosed) {
+ cubit.orderHouseKeeping(result as List<String>);
}
- if (!bloc.isClosed) bloc.add(CheckIfHouseKeepingOrdered());
+ if (!cubit.isClosed) cubit.checkIfHouseKeepingOrdered();
},
child: Padding(
padding: const EdgeInsets.all(16.0),
@@ -60,14 +61,14 @@ class HousekeepingButton extends StatelessWidget {
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Text(
- bloc.state.isHouseKeepingOrdered == true
+ cubit.state.isHouseKeepingOrdered == true
? context.strings.booking_details_page_housekeeping_button_title_ordered
: context.strings.booking_details_page_housekeeping_button_title,
style: Theme.of(context).textTheme.headlineSmall,
maxLines: 1,
),
Text(
- bloc.state.isHouseKeepingOrdered == true
+ cubit.state.isHouseKeepingOrdered == true
? context
.strings
.booking_details_page_housekeeping_button_subtitle_ordered
@@ -80,7 +81,7 @@ class HousekeepingButton extends StatelessWidget {
),
),
const SizedBox(width: 12),
- if (bloc.state.isHouseKeepingOrdered == true)
+ if (cubit.state.isHouseKeepingOrdered == true)
SvgPicture.asset(Assets.icons.icCheckmark.path)
else
SvgPicture.asset(Assets.icons.arrowLeft.path),
diff --git a/comwell_key_app/lib/booking_details/components/preregister_button.dart b/comwell_key_app/lib/booking_details/components/preregister_button.dart
index 7c653f57..71456a42 100644
--- a/comwell_key_app/lib/booking_details/components/preregister_button.dart
+++ b/comwell_key_app/lib/booking_details/components/preregister_button.dart
@@ -1,3 +1,4 @@
+import 'package:comwell_key_app/booking_details/bloc/booking_details_cubit.dart';
import 'package:comwell_key_app/utils/l10n_utils.dart';
import 'package:flutter/material.dart';
import 'package:flutter_bloc/flutter_bloc.dart';
@@ -13,7 +14,7 @@ class PreregisterButton extends StatelessWidget {
@override
Widget build(BuildContext context) {
- final bloc = context.read<BookingDetailsBloc>();
+ final cubit = context.read<BookingDetailsCubit>();
final theme = Theme.of(context);
@@ -24,9 +25,9 @@ class PreregisterButton extends StatelessWidget {
onPressed: () async {
final (result) = await context.push(
AppRoutes.preregistration,
- extra: [bloc.booking, bloc.state.upSales]);
+ extra: [cubit.booking, cubit.state.upSales]);
if (result != null) {
- bloc.add(PreregisterEvent());
+ cubit.preregisterEvent();
}
},
child: Padding(
diff --git a/comwell_key_app/lib/booking_details/components/room_number_container.dart b/comwell_key_app/lib/booking_details/components/room_number_container.dart
index 3390d797..d2777faf 100644
--- a/comwell_key_app/lib/booking_details/components/room_number_container.dart
+++ b/comwell_key_app/lib/booking_details/components/room_number_container.dart
@@ -1,9 +1,9 @@
-import 'package:comwell_key_app/booking_details/bloc/booking_details_bloc.dart';
+import 'package:comwell_key_app/booking_details/bloc/booking_details_cubit.dart';
import 'package:comwell_key_app/utils/l10n_utils.dart';
import 'package:flutter/material.dart';
class RoomNumberContainer extends StatelessWidget {
- final BookingDetailsBloc cubit;
+ final BookingDetailsCubit cubit;
const RoomNumberContainer({super.key, required this.cubit});
@override
diff --git a/comwell_key_app/lib/booking_details/components/share_button.dart b/comwell_key_app/lib/booking_details/components/share_button.dart
index 3a9e8629..8d41cfff 100644
--- a/comwell_key_app/lib/booking_details/components/share_button.dart
+++ b/comwell_key_app/lib/booking_details/components/share_button.dart
@@ -1,4 +1,5 @@
import 'package:comwell_key_app/booking_details/bloc/booking_details_bloc.dart';
+import 'package:comwell_key_app/booking_details/bloc/booking_details_cubit.dart';
import 'package:comwell_key_app/common/components/comwell_error_widget.dart';
import 'package:comwell_key_app/overview/models/booking.dart';
import 'package:comwell_key_app/overview/models/guest.dart';
@@ -31,8 +32,8 @@ class ShareButton extends StatelessWidget {
@override
Widget build(BuildContext context) {
- final bloc = context.read<BookingDetailsBloc>();
- final booking = bloc.booking;
+ final cubit = context.read<BookingDetailsCubit>();
+ final booking = cubit.booking;
final numberOfUsers = guests.length;
final allInitials = generateInitials(guests);
@@ -95,7 +96,7 @@ class ShareButton extends StatelessWidget {
if (results is List<String>) {
final updatedBooking = booking.updateGuests(results);
- bloc.add(UpdateBookingEvent(updatedBooking));
+ cubit.updateBooking(updatedBooking);
}
},
style: ElevatedButton.styleFrom(
diff --git a/comwell_key_app/lib/check_in/bloc/check_in_state.dart b/comwell_key_app/lib/check_in/bloc/check_in_state.dart
index c8d892b4..7eb27561 100644
--- a/comwell_key_app/lib/check_in/bloc/check_in_state.dart
+++ b/comwell_key_app/lib/check_in/bloc/check_in_state.dart
@@ -19,7 +19,7 @@ abstract class CheckInState with _$CheckInState {
@Default("") String roomNumber,
}) = _CheckInState;
- CheckInState._();
+ const CheckInState._();
String titleStringId(BuildContext context) {
switch (cardState) {
diff --git a/comwell_key_app/lib/common/components/comwell_app_bar.dart b/comwell_key_app/lib/common/components/comwell_app_bar.dart
index 045e22ff..88134dd3 100644
--- a/comwell_key_app/lib/common/components/comwell_app_bar.dart
+++ b/comwell_key_app/lib/common/components/comwell_app_bar.dart
@@ -2,6 +2,7 @@ import 'package:comwell_key_app/common/components/round_icon_button.dart';
import 'package:comwell_key_app/common/const.dart';
import 'package:comwell_key_app/routing/app_routes.dart';
import 'package:comwell_key_app/themes/light_theme.dart';
+import 'package:comwell_key_app/utils/navigation_utils.dart';
import 'package:flutter/material.dart';
import 'package:go_router/go_router.dart';
diff --git a/comwell_key_app/lib/hotel_information/cubit/hotel_information_cubit.dart b/comwell_key_app/lib/hotel_information/cubit/hotel_information_cubit.dart
index 78c0f111..cc8e3845 100644
--- a/comwell_key_app/lib/hotel_information/cubit/hotel_information_cubit.dart
+++ b/comwell_key_app/lib/hotel_information/cubit/hotel_information_cubit.dart
@@ -16,7 +16,6 @@ class HotelInformationCubit extends Cubit<HotelInformationState> {
HotelInformationCubit({required this.hotelInformationRepository, required this.booking})
: super(const HotelInformationState.initial()) {
- print("qqq HotelInformationCubit");
init();
}
diff --git a/comwell_key_app/lib/my_booking/my_booking_page.dart b/comwell_key_app/lib/my_booking/my_booking_page.dart
index 02df3cc8..3c290925 100644
--- a/comwell_key_app/lib/my_booking/my_booking_page.dart
+++ b/comwell_key_app/lib/my_booking/my_booking_page.dart
@@ -1,4 +1,5 @@
import 'package:comwell_key_app/booking_details/bloc/booking_details_bloc.dart';
+import 'package:comwell_key_app/booking_details/bloc/booking_details_cubit.dart';
import 'package:comwell_key_app/booking_details/components/share_button.dart';
import 'package:comwell_key_app/common/components/comwell_app_bar.dart';
import 'package:comwell_key_app/my_booking/cubit/my_booking_cubit.dart';
@@ -204,7 +205,7 @@ class MyBookingPage extends StatelessWidget {
width: 100,
height: 70,
child: BlocProvider(
- create: (context) => BookingDetailsBloc(
+ create: (context) => BookingDetailsCubit(
booking: booking,
locator(),
locator(),
diff --git a/comwell_key_app/lib/presentation/screens/concierge/concierge_route.dart b/comwell_key_app/lib/presentation/screens/concierge/concierge_route.dart
index 9424a53a..b7d81fd6 100644
--- a/comwell_key_app/lib/presentation/screens/concierge/concierge_route.dart
+++ b/comwell_key_app/lib/presentation/screens/concierge/concierge_route.dart
@@ -28,10 +28,16 @@ class ConciergeRoute extends GoRouteData with $ConciergeRoute {
create: (context) => ConciergeCubit(locator()),
child: BlocBuilder<ConciergeCubit, ConciergeState>(
builder: (context, state) {
- return ConciergeHotelOverview(config: ConciergeConfig(hotelCode: hotelCode, flavor: Flavor.production, userToken: state.userToken));
+ return ConciergeHotelOverview(
+ config: ConciergeConfig(
+ hotelCode: hotelCode,
+ flavor: Flavor.production,
+ userToken: state.userToken,
+ ),
+ );
},
),
),
);
}
-}
\ No newline at end of file
+}
diff --git a/comwell_key_app/lib/up_sales/components/catalog/service_catalog.dart b/comwell_key_app/lib/up_sales/components/catalog/service_catalog.dart
index 0ca9c273..76c84793 100644
--- a/comwell_key_app/lib/up_sales/components/catalog/service_catalog.dart
+++ b/comwell_key_app/lib/up_sales/components/catalog/service_catalog.dart
@@ -1,4 +1,4 @@
-import 'package:comwell_key_app/booking_details/bloc/booking_details_bloc.dart';
+import 'package:comwell_key_app/booking_details/bloc/booking_details_cubit.dart';
import 'package:comwell_key_app/common/const.dart';
import 'package:comwell_key_app/overview/models/booking.dart';
import 'package:comwell_key_app/routing/app_routes.dart';
@@ -16,7 +16,7 @@ class ServiceCatalog extends StatelessWidget {
final void Function(AddOnUpgrade, bool) onServiceSelected;
final Booking booking;
final bool isSinglePurchase;
- final BookingDetailsBloc? bookingDetailsBloc;
+ final BookingDetailsCubit? bookingDetailsCubit;
const ServiceCatalog({
super.key,
@@ -27,7 +27,7 @@ class ServiceCatalog extends StatelessWidget {
required this.onServiceSelected,
required this.booking,
this.isSinglePurchase = false,
- this.bookingDetailsBloc,
+ this.bookingDetailsCubit,
});
@override
@@ -49,8 +49,8 @@ class ServiceCatalog extends StatelessWidget {
isRoomUpgradeSelected: isSelected,
isSinglePurchase: isSinglePurchase));
- if (bookingDetailsBloc != null && isSinglePurchase) {
- bookingDetailsBloc!.add(const InitialEvent());
+ if (bookingDetailsCubit != null && isSinglePurchase) {
+ bookingDetailsCubit!.init();
}
if (result is List && result.length == 2) {
diff --git a/comwell_key_app/lib/utils/navigation_utils.dart b/comwell_key_app/lib/utils/navigation_utils.dart
new file mode 100644
index 00000000..45639d41
--- /dev/null
+++ b/comwell_key_app/lib/utils/navigation_utils.dart
@@ -0,0 +1,7 @@
+/// GoRoute has a navigation issue where pop() will throw an error
+/// Apply right before the pop() to fix it.
+/// https://github.com/flutter/flutter/issues/160696#issuecomment-3297016874
+/// Can also be used to facilitate dual operations, like pop immediatly followed by push
+Future<void> asyncHackToFixNavIssue() async {
+ await Future<void>.delayed(const Duration(milliseconds: 10));
+}