6177214e-ce7c-49e3-99de-ff9721b26f63 — Commit 13129a46
Changed files
.../components/booking_details_bottom_sheet.dart | 3 +- .../components/choose_room_widget.dart | 2 - .../lib/common/components/comwell_app_bar.dart | 7 +- .../pregistration/cubit/preregistration_cubit.dart | 10 +- .../pages/prereg_up_sales_catalog_page.dart | 28 ++-- comwell_key_app/lib/routing/app_router.dart | 23 +++- comwell_key_app/lib/routing/app_routes.dart | 1 + comwell_key_app/lib/themes/dark_theme.dart | 1 + comwell_key_app/lib/themes/light_theme.dart | 2 +- .../components/catalog/service_catalog.dart | 46 +++++-- .../up_sales/components/comwell_radio_button.dart | 14 +- .../components/up_sales_services_widget.dart | 15 ++- .../components/up_sales_upgrades_widget.dart | 16 ++- .../lib/up_sales/cubit/up_sales_cubit.dart | 16 ++- .../lib/up_sales/pages/other_upgrade_page.dart | 21 +-- .../lib/up_sales/pages/services_upgrade_page.dart | 143 +++++++++++++++++++++ .../up_sales/pages/up_sales_processing_page.dart | 2 +- comwell_key_app/lib/up_sales/up_sales_catalog.dart | 54 +++++--- 18 files changed, 314 insertions(+), 90 deletions(-)
Diff
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 ff98611b..88f8e6a2 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
@@ -163,7 +163,8 @@ class BookingDetailsBottomSheet extends StatelessWidget {
),
const SizedBox(height: 16),
ServiceCatalog(
- upSales: cubit.upSales, height: 252, showRadioButton: false),
+ upSales: cubit.upSales, height: 252, showRadioButton: false,
+ ),
],
);
}
diff --git a/comwell_key_app/lib/choose_share_room/components/choose_room_widget.dart b/comwell_key_app/lib/choose_share_room/components/choose_room_widget.dart
index b40e97a2..8c0fa532 100644
--- a/comwell_key_app/lib/choose_share_room/components/choose_room_widget.dart
+++ b/comwell_key_app/lib/choose_share_room/components/choose_room_widget.dart
@@ -1,9 +1,7 @@
-import 'package:comwell_key_app/routing/app_routes.dart';
import 'package:easy_localization/easy_localization.dart';
import 'package:flutter/material.dart';
import 'package:comwell_key_app/themes/light_theme.dart';
import 'package:flutter_svg/svg.dart';
-import 'package:go_router/go_router.dart';
class ChooseRoomWidget extends StatelessWidget {
final String roomName;
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 8f9c392f..5894bc88 100644
--- a/comwell_key_app/lib/common/components/comwell_app_bar.dart
+++ b/comwell_key_app/lib/common/components/comwell_app_bar.dart
@@ -45,7 +45,12 @@ class ComwellAppBar extends StatelessWidget implements PreferredSizeWidget {
if (onBackPressed != null) {
onBackPressed!.call();
} else {
- context.pop();
+ final goRouter = GoRouter.of(context);
+ if (goRouter.canPop()) {
+ goRouter.pop();
+ } else {
+ goRouter.goNamed(AppRoutes.overview.name);
+ }
}
},
),
diff --git a/comwell_key_app/lib/pregistration/cubit/preregistration_cubit.dart b/comwell_key_app/lib/pregistration/cubit/preregistration_cubit.dart
index 7138564d..a4961330 100644
--- a/comwell_key_app/lib/pregistration/cubit/preregistration_cubit.dart
+++ b/comwell_key_app/lib/pregistration/cubit/preregistration_cubit.dart
@@ -355,12 +355,14 @@ class PreregistrationCubit extends Cubit<PreregistrationState> {
final filteredUpSales = state.selectedUpSales
.where((upgrade) => upgrade.type != UpgradeType.room)
.toList();
-
emit(state.copyWith(selectedUpSales: [...filteredUpSales, roomUpgrade]));
+ } else if (roomUpgrade.type == UpgradeType.service) {
+ final filteredUpSalesService = state.selectedUpSales
+ .where((upgrade) => upgrade.type != UpgradeType.service)
+ .toList();
+ emit(state.copyWith(selectedUpSales: [...filteredUpSalesService, roomUpgrade]));
} else {
- // For non-room upgrades, just add to the list
- emit(state
- .copyWith(selectedUpSales: [...state.selectedUpSales, roomUpgrade]));
+ emit(state.copyWith(selectedUpSales: [...state.selectedUpSales, roomUpgrade]));
}
}
diff --git a/comwell_key_app/lib/pregistration/pages/prereg_up_sales_catalog_page.dart b/comwell_key_app/lib/pregistration/pages/prereg_up_sales_catalog_page.dart
index b33542f2..d050c47c 100644
--- a/comwell_key_app/lib/pregistration/pages/prereg_up_sales_catalog_page.dart
+++ b/comwell_key_app/lib/pregistration/pages/prereg_up_sales_catalog_page.dart
@@ -52,6 +52,13 @@ class PreregUpSalesCatalogPage extends StatelessWidget {
ServiceCatalog(
upSales: state.upSales,
selectedUpSales: state.selectedUpSales,
+ onServiceSelected: (roomUpgrade, isSelected) {
+ if (isSelected) {
+ cubit.removeUpgrade(roomUpgrade);
+ } else {
+ cubit.addSelected(roomUpgrade);
+ }
+ },
onTap: (roomUpgrade) {
final isSelected =
state.selectedUpSales.contains(roomUpgrade);
@@ -60,7 +67,8 @@ class PreregUpSalesCatalogPage extends StatelessWidget {
} else {
cubit.addSelected(roomUpgrade);
}
- }),
+ },
+ ),
const SizedBox(height: 24),
Padding(
padding: const EdgeInsets.symmetric(horizontal: 16),
@@ -72,16 +80,14 @@ class PreregUpSalesCatalogPage extends StatelessWidget {
upSales: state.upSales,
selectedUpSales: state.selectedUpSales,
onTap: (roomUpgrade) {
- handleReadMoreTapPrereg(
- context: context,
- routeName: AppRoutes.roomUpgrade.name,
- cubit: cubit,
- roomUpgrade: roomUpgrade,
- quantity: state.selectedUpSales
- .where((e) => e.id == roomUpgrade.id)
- .length,
- selectedUpSales: state.selectedUpSales,
- );
+ final isSelected =
+ state.selectedUpSales.contains(roomUpgrade);
+ if (isSelected) {
+ cubit.removeUpgrade(roomUpgrade);
+ } else {
+ cubit.addSelected(roomUpgrade);
+ }
+
},
onReadMoreTap:
(context, roomUpgrade, quantity, selectedUpSales) =>
diff --git a/comwell_key_app/lib/routing/app_router.dart b/comwell_key_app/lib/routing/app_router.dart
index 596dd8e3..f19ae9ea 100644
--- a/comwell_key_app/lib/routing/app_router.dart
+++ b/comwell_key_app/lib/routing/app_router.dart
@@ -51,6 +51,7 @@ import 'package:comwell_key_app/up_sales/models/room_upgrade_extra.dart';
import 'package:comwell_key_app/up_sales/models/room_upgrade_list.dart';
import 'package:comwell_key_app/up_sales/pages/other_upgrade_page.dart';
import 'package:comwell_key_app/up_sales/pages/room_upgrade_page.dart';
+import 'package:comwell_key_app/up_sales/pages/services_upgrade_page.dart';
import 'package:comwell_key_app/up_sales/pages/up_sale_confirmation_page.dart';
import 'package:comwell_key_app/up_sales/pages/up_sales_processing_page.dart';
import 'package:comwell_key_app/up_sales/up_sales_repository.dart';
@@ -111,11 +112,11 @@ GoRouter goRouter() {
navigatorKey: _shellNavigatorKey,
parentNavigatorKey: _rootNavigatorKey,
pageBuilder: (context, state, child) {
-
return NoTransitionPage(
child: BlocProvider(
create: (_) => HotelInformationCubit(
- hotelInformationRepository: locator<HotelInformationRepository>(),
+ hotelInformationRepository:
+ locator<HotelInformationRepository>(),
booking: state.extra as Booking,
culture: context.locale,
)..init(),
@@ -130,14 +131,12 @@ GoRouter goRouter() {
builder: (context, state) {
return const HotelInformationMenu();
}),
-
GoRoute(
path:
"/${AppRoutes.hotelInformation.name}/${AppRoutes.facility.name}",
name:
"${AppRoutes.hotelInformation.name}/${AppRoutes.facility.name}",
builder: (context, state) {
-
return FacilityPage(facility: state.extra as Facility);
}),
]),
@@ -260,8 +259,7 @@ GoRouter goRouter() {
builder: (context, state) {
final booking = state.extra as Booking;
return BlocProvider<BookingDetailsBloc>(
- create: (BuildContext context) => BookingDetailsBloc(
- booking,
+ create: (BuildContext context) => BookingDetailsBloc(booking,
bookingDetailsRepository:
locator<BookingDetailsRepository>(),
profileRepository: locator<ProfileRepository>(),
@@ -399,6 +397,19 @@ GoRouter goRouter() {
child: OtherUpgradePage(extra: roomUpgrade),
);
}),
+ GoRoute(
+ path: "/${AppRoutes.servicesUpgrade.name}",
+ name: AppRoutes.servicesUpgrade.name,
+ builder: (context, state) {
+ final roomUpgradeList = state.extra as RoomUpgradeList;
+ return BlocProvider(
+ create: (context) =>
+ UpSalesCubit(upSaleRepository: locator<UpSalesRepository>())
+ ..init(),
+ child: ServicesUpgradePage(roomUpgradeList: roomUpgradeList),
+ );
+ },
+ ),
GoRoute(
path: "/${AppRoutes.upSaleConfirmation.name}",
name: AppRoutes.upSaleConfirmation.name,
diff --git a/comwell_key_app/lib/routing/app_routes.dart b/comwell_key_app/lib/routing/app_routes.dart
index 0e3e2d81..baacc887 100644
--- a/comwell_key_app/lib/routing/app_routes.dart
+++ b/comwell_key_app/lib/routing/app_routes.dart
@@ -29,6 +29,7 @@ enum AppRoutes {
upSalesCatalog,
roomUpgrade,
otherUpgrade,
+ servicesUpgrade,
upSaleConfirmation,
upSalesAnimation,
}
diff --git a/comwell_key_app/lib/themes/dark_theme.dart b/comwell_key_app/lib/themes/dark_theme.dart
index 6195139d..c3990b3a 100644
--- a/comwell_key_app/lib/themes/dark_theme.dart
+++ b/comwell_key_app/lib/themes/dark_theme.dart
@@ -40,6 +40,7 @@ ThemeData darkTheme = ThemeData(
style: ElevatedButton.styleFrom(
elevation: 0,
backgroundColor: sandColor[80],
+ minimumSize: const Size(double.infinity, 52),
textStyle: const TextStyle(
color: Colors.white,
fontSize: 16,
diff --git a/comwell_key_app/lib/themes/light_theme.dart b/comwell_key_app/lib/themes/light_theme.dart
index 0fce1cd0..bbeeb985 100644
--- a/comwell_key_app/lib/themes/light_theme.dart
+++ b/comwell_key_app/lib/themes/light_theme.dart
@@ -43,7 +43,7 @@ ThemeData lightTheme = ThemeData(
elevatedButtonTheme: ElevatedButtonThemeData(
style: ElevatedButton.styleFrom(
backgroundColor: sandColor[80],
- minimumSize: const Size(100, 52),
+ minimumSize: const Size(double.infinity, 52),
textStyle: const TextStyle(
color: Colors.white,
fontSize: 16,
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 a4c7fb39..357a3b24 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,9 +1,12 @@
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/up_sales/components/up_sales_services_widget.dart';
import 'package:comwell_key_app/up_sales/models/room_upgrade.dart';
+import 'package:comwell_key_app/up_sales/models/room_upgrade_list.dart';
import 'package:easy_localization/easy_localization.dart';
import 'package:flutter/material.dart';
+import 'package:go_router/go_router.dart';
class ServiceCatalog extends StatelessWidget {
final List<RoomUpgrade> upSales;
@@ -11,13 +14,15 @@ class ServiceCatalog extends StatelessWidget {
final Function(RoomUpgrade)? onTap;
final List<RoomUpgrade>? selectedUpSales;
final bool showRadioButton;
- const ServiceCatalog(
+ final Function(RoomUpgrade, bool)? onServiceSelected;
+ const ServiceCatalog(
{super.key,
required this.upSales,
this.height,
this.onTap,
this.selectedUpSales,
- this.showRadioButton = true});
+ this.showRadioButton = true,
+ this.onServiceSelected});
@override
Widget build(BuildContext context) {
@@ -30,7 +35,8 @@ class ServiceCatalog extends StatelessWidget {
return Padding(
padding: const EdgeInsets.symmetric(horizontal: 16),
child: Text('no_services_available'.tr(),
- style: theme.textTheme.headlineMedium?.copyWith(color: colorHeadlineText)),
+ style: theme.textTheme.headlineMedium
+ ?.copyWith(color: colorHeadlineText)),
);
}
@@ -41,15 +47,33 @@ class ServiceCatalog extends StatelessWidget {
itemCount: services.length,
itemBuilder: (context, index) {
final isPopular = services.elementAt(index).tags.contains('popular');
- return UpSalesServicesWidget(
- showRadioButton: showRadioButton,
- width: kUpSalesServiceWidgetWidthLarge,
- roomUpgrade: services.elementAt(index),
- isSelected: selectedUpSales?.map((e) => e.id).toList().contains(services.elementAt(index).id) ?? false,
- isPopular: isPopular,
- onTap: (roomUpgrade) {
- onTap?.call(roomUpgrade);
+ return GestureDetector(
+ onTap: () async {
+ final result = await context.pushNamed(
+ AppRoutes.servicesUpgrade.name,
+ extra: RoomUpgradeList(
+ roomUpgrade: services.elementAt(index),
+ roomUpgrades: selectedUpSales ?? []
+ )
+ );
+
+ if (result is List && result.length == 2) {
+ final roomUpgrade = result[0] as RoomUpgrade;
+ final isSelected = result[1] as bool;
+
+ onServiceSelected?.call(roomUpgrade, isSelected);
+ }
},
+ child: UpSalesServicesWidget(
+ showRadioButton: showRadioButton,
+ width: kUpSalesServiceWidgetWidthLarge,
+ roomUpgrade: services.elementAt(index),
+ selectedUpSales: selectedUpSales,
+ isSelected:
+ selectedUpSales?.contains(services.elementAt(index)) ?? false,
+ isPopular: isPopular,
+ onTap: onTap,
+ ),
);
},
),
diff --git a/comwell_key_app/lib/up_sales/components/comwell_radio_button.dart b/comwell_key_app/lib/up_sales/components/comwell_radio_button.dart
index a6c9d04b..0b9f440b 100644
--- a/comwell_key_app/lib/up_sales/components/comwell_radio_button.dart
+++ b/comwell_key_app/lib/up_sales/components/comwell_radio_button.dart
@@ -8,19 +8,25 @@ class ComwellRadioButton extends StatelessWidget {
@override
Widget build(BuildContext context) {
-
return InkWell(
onTap: onTap,
- child: Container(
+ child: AnimatedContainer(
+ duration: const Duration(milliseconds: 200),
+ curve: Curves.easeInOut,
width: 24,
height: 24,
decoration: BoxDecoration(
shape: BoxShape.circle,
- border: Border.all(color: colorDivider, width: 1.5),
+ border: Border.all(
+ color: selected ? sandColor : colorDivider,
+ width: selected ? 2.0 : 1.5,
+ ),
),
child: selected
? Center(
- child: Container(
+ child: AnimatedContainer(
+ duration: const Duration(milliseconds: 200),
+ curve: Curves.easeInOut,
width: 16,
height: 16,
decoration: const BoxDecoration(
diff --git a/comwell_key_app/lib/up_sales/components/up_sales_services_widget.dart b/comwell_key_app/lib/up_sales/components/up_sales_services_widget.dart
index 779b32ba..3f8f0689 100644
--- a/comwell_key_app/lib/up_sales/components/up_sales_services_widget.dart
+++ b/comwell_key_app/lib/up_sales/components/up_sales_services_widget.dart
@@ -13,6 +13,7 @@ class UpSalesServicesWidget extends StatelessWidget {
final bool? isPopular;
final Function(RoomUpgrade)? onTap;
final bool showRadioButton;
+ final List<RoomUpgrade>? selectedUpSales;
const UpSalesServicesWidget(
{super.key,
this.width = 328,
@@ -21,13 +22,16 @@ class UpSalesServicesWidget extends StatelessWidget {
this.isSelected,
this.isPopular,
this.onTap,
- this.showRadioButton = true});
+ this.showRadioButton = true,
+ this.selectedUpSales});
@override
Widget build(BuildContext context) {
final theme = Theme.of(context);
- return Container(
+ return AnimatedContainer(
+ duration: const Duration(milliseconds: 300),
+ curve: Curves.easeInOut,
width: width,
height: height,
margin: const EdgeInsets.only(left: 16, right: 0, top: 8, bottom: 8),
@@ -35,7 +39,10 @@ class UpSalesServicesWidget extends StatelessWidget {
decoration: BoxDecoration(
color: Colors.white,
borderRadius: BorderRadius.circular(12),
- border: Border.all(color: colorDivider, width: 1),
+ border: Border.all(
+ color: isSelected == true ? sandColor : colorDivider,
+ width: 1,
+ ),
),
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
@@ -65,7 +72,7 @@ class UpSalesServicesWidget extends StatelessWidget {
const SizedBox(width: 8),
if (showRadioButton)
ComwellRadioButton(
- selected: isSelected ?? false,
+ selected: selectedUpSales?.contains(roomUpgrade) ?? false,
onTap: () {
onTap?.call(roomUpgrade);
}),
diff --git a/comwell_key_app/lib/up_sales/components/up_sales_upgrades_widget.dart b/comwell_key_app/lib/up_sales/components/up_sales_upgrades_widget.dart
index 1ce9d80e..16eb58f5 100644
--- a/comwell_key_app/lib/up_sales/components/up_sales_upgrades_widget.dart
+++ b/comwell_key_app/lib/up_sales/components/up_sales_upgrades_widget.dart
@@ -35,14 +35,19 @@ class UpSalesUpgradesWidget extends StatelessWidget {
final quantity =
selectedUpSales.where((element) => element.id == roomUpgrade.id).length;
- return Container(
+ return AnimatedContainer(
+ duration: const Duration(milliseconds: 300),
+ curve: Curves.easeInOut,
width: width,
height: height,
margin: const EdgeInsets.only(left: 16, right: 8, top: 8, bottom: 16),
decoration: BoxDecoration(
color: Colors.white,
borderRadius: BorderRadius.circular(10),
- border: Border.all(color: colorDivider, width: 1),
+ border: Border.all(
+ color: isSelected == true ? sandColor : colorDivider,
+ width: 1,
+ ),
),
child: Column(
mainAxisSize: MainAxisSize.min,
@@ -113,7 +118,12 @@ class UpSalesUpgradesWidget extends StatelessWidget {
const SizedBox(width: 8),
showCounter
? UpgradesCounter(quantity: quantity)
- : ComwellRadioButton(selected: isSelected),
+ : ComwellRadioButton(
+ selected: isSelected,
+ onTap: () {
+ onTap(roomUpgrade);
+ },
+ ),
],
),
],
diff --git a/comwell_key_app/lib/up_sales/cubit/up_sales_cubit.dart b/comwell_key_app/lib/up_sales/cubit/up_sales_cubit.dart
index 588d183d..d83d4353 100644
--- a/comwell_key_app/lib/up_sales/cubit/up_sales_cubit.dart
+++ b/comwell_key_app/lib/up_sales/cubit/up_sales_cubit.dart
@@ -42,11 +42,15 @@ class UpSalesCubit extends Cubit<UpSalesState> {
final filteredUpSales = state.selectedUpSales
.where((upgrade) => upgrade.type != UpgradeType.room)
.toList();
-
emit(state.updateSelectedUpSales(
roomUpgradeList: [...filteredUpSales, roomUpgrade]));
+ } else if (roomUpgrade.type == UpgradeType.service) {
+ final filteredUpSalesService = state.selectedUpSales
+ .where((upgrade) => upgrade.type != UpgradeType.service)
+ .toList();
+ emit(state.updateSelectedUpSales(
+ roomUpgradeList: [...filteredUpSalesService, roomUpgrade]));
} else {
- // For non-room upgrades, just add to the list
emit(state.addSelectedUpsales(roomUpgrade: roomUpgrade));
}
}
@@ -62,7 +66,6 @@ class UpSalesCubit extends Cubit<UpSalesState> {
}
void onContinue() {
-
emit(state.copyWith(selected: false));
}
@@ -86,13 +89,14 @@ class UpSalesCubit extends Cubit<UpSalesState> {
}
int get extrasTotalPrice {
- return state.selectedUpSales.fold(0, (sum, upgrade) => sum + int.parse(upgrade.price));
+ return state.selectedUpSales
+ .fold(0, (sum, upgrade) => sum + int.parse(upgrade.price));
}
int extrasTotalQuantity(RoomUpgrade roomUpgrade) {
return state.selectedUpSales
- .where((element) => element.id == roomUpgrade.id)
- .length;
+ .where((element) => element.id == roomUpgrade.id)
+ .length;
}
void toggleTermsAccepted() {
diff --git a/comwell_key_app/lib/up_sales/pages/other_upgrade_page.dart b/comwell_key_app/lib/up_sales/pages/other_upgrade_page.dart
index 2094afe0..189699e7 100644
--- a/comwell_key_app/lib/up_sales/pages/other_upgrade_page.dart
+++ b/comwell_key_app/lib/up_sales/pages/other_upgrade_page.dart
@@ -8,17 +8,10 @@ import 'package:flutter_bloc/flutter_bloc.dart';
import '../../themes/light_theme.dart';
import '../components/up_sales_bottom_button.dart';
-class OtherUpgradePage extends StatefulWidget {
+class OtherUpgradePage extends StatelessWidget {
final RoomUpgradeExtra extra;
const OtherUpgradePage({super.key, required this.extra});
- @override
- State<OtherUpgradePage> createState() => _OtherUpgradePageState();
-}
-
-class _OtherUpgradePageState extends State<OtherUpgradePage> {
-
-
@override
Widget build(BuildContext context) {
final theme = Theme.of(context);
@@ -41,7 +34,7 @@ class _OtherUpgradePageState extends State<OtherUpgradePage> {
topRight: Radius.circular(10),
),
child: Image.asset(
- widget.extra.roomUpgrade.images!.first,
+ extra.roomUpgrade.images!.first,
height: height * 0.5,
width: double.infinity,
fit: BoxFit.cover,
@@ -72,10 +65,10 @@ class _OtherUpgradePageState extends State<OtherUpgradePage> {
Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [
- Text(widget.extra.roomUpgrade.name,
+ Text(extra.roomUpgrade.name,
style: theme.textTheme.headlineLarge),
Text("total_charge_value"
- .tr(args: [widget.extra.roomUpgrade.price]),
+ .tr(args: [extra.roomUpgrade.price]),
style: theme.textTheme.headlineLarge),
],
),
@@ -83,7 +76,7 @@ class _OtherUpgradePageState extends State<OtherUpgradePage> {
SizedBox(
width: width * 0.8,
child: Text(
- widget.extra.roomUpgrade.description,
+ extra.roomUpgrade.description,
style: theme.textTheme.bodySmall
?.copyWith(color: colorHeadlineText),
),
@@ -103,12 +96,12 @@ class _OtherUpgradePageState extends State<OtherUpgradePage> {
mainAxisAlignment: MainAxisAlignment.spaceBetween,
crossAxisAlignment: CrossAxisAlignment.center,
children: [
- ItemCounter(extra: widget.extra),
+ ItemCounter(extra: extra),
Expanded(
flex: 2,
child: UpSalesBottomButton(
onAddUpSale: () {
- Navigator.pop(context, [widget.extra.roomUpgrade, true]);
+ Navigator.pop(context, [extra.roomUpgrade, true]);
},
onContinue: () {
Navigator.pop(context, cubit.state.quantity);
diff --git a/comwell_key_app/lib/up_sales/pages/services_upgrade_page.dart b/comwell_key_app/lib/up_sales/pages/services_upgrade_page.dart
new file mode 100644
index 00000000..d93ab4e8
--- /dev/null
+++ b/comwell_key_app/lib/up_sales/pages/services_upgrade_page.dart
@@ -0,0 +1,143 @@
+import 'package:comwell_key_app/common/components/comwell_app_bar.dart';
+import 'package:comwell_key_app/themes/light_theme.dart';
+import 'package:comwell_key_app/up_sales/components/up_sales_bottom_button.dart';
+import 'package:comwell_key_app/up_sales/cubit/up_sales_cubit.dart';
+import 'package:comwell_key_app/up_sales/cubit/up_sales_state.dart';
+import 'package:comwell_key_app/up_sales/models/room_upgrade_list.dart';
+import 'package:easy_localization/easy_localization.dart';
+import 'package:flutter/material.dart';
+import 'package:flutter_bloc/flutter_bloc.dart';
+
+class ServicesUpgradePage extends StatelessWidget {
+ final RoomUpgradeList roomUpgradeList;
+ const ServicesUpgradePage({super.key, required this.roomUpgradeList});
+
+ @override
+ Widget build(BuildContext context) {
+ final theme = Theme.of(context);
+ final width = MediaQuery.of(context).size.width;
+ final height = MediaQuery.of(context).size.height;
+
+ return BlocBuilder<UpSalesCubit, UpSalesState>(
+ builder: (context, state) {
+ final cubit = context.read<UpSalesCubit>();
+ final bool isSelected = roomUpgradeList.roomUpgrades.contains(roomUpgradeList.roomUpgrade);
+ return Scaffold(
+ backgroundColor: Colors.white,
+ appBar: const ComwellAppBar(),
+ extendBodyBehindAppBar: true,
+ body: Column(
+ children: [
+ // Image
+ Stack(
+ children: [
+ ClipRRect(
+ borderRadius: const BorderRadius.only(
+ topLeft: Radius.circular(10),
+ topRight: Radius.circular(10),
+ ),
+ child: Image.asset(
+ 'assets/images/welcome_image.jpeg',
+ height: height * 0.5,
+ width: double.infinity,
+ fit: BoxFit.cover,
+ ),
+ ),
+ Container(
+ decoration: const BoxDecoration(
+ borderRadius: BorderRadius.all(Radius.circular(12)),
+ gradient: LinearGradient(
+ begin: Alignment.topCenter,
+ end: Alignment.bottomCenter,
+ colors: [
+ Colors.black26,
+ Colors.black54,
+ ],
+ ),
+ ),
+ ),
+ ],
+ ),
+ Container(
+ width: double.infinity,
+ color: Colors.white,
+ padding:
+ const EdgeInsets.symmetric(horizontal: 16, vertical: 24),
+ child: Column(
+ crossAxisAlignment: CrossAxisAlignment.start,
+ children: [
+ Row(
+ mainAxisAlignment: MainAxisAlignment.spaceBetween,
+ children: [
+ Text(roomUpgradeList.roomUpgrade.name,
+ style: theme.textTheme.headlineLarge),
+ Text("total_charge_value".tr(args: [roomUpgradeList.roomUpgrade.price]),
+ style: theme.textTheme.headlineLarge),
+ ],
+ ),
+ const SizedBox(height: 12),
+ SizedBox(
+ width: width * 0.8,
+ child: Text(
+ roomUpgradeList.roomUpgrade.description,
+ style: theme.textTheme.bodySmall
+ ?.copyWith(color: colorHeadlineText),
+ ),
+ ),
+ ],
+ ),
+ ),
+ ],
+ ),
+ bottomNavigationBar: Column(
+ mainAxisSize: MainAxisSize.min,
+ children: [
+ const Divider(color: colorDivider),
+ UpSalesBottomButton(
+ onAddUpSale: () {
+
+ Navigator.pop(context,
+ [roomUpgradeList.roomUpgrade, isSelected]);
+ },
+ onContinue: () {
+ Navigator.pop(context,
+ [roomUpgradeList.roomUpgrade, isSelected]);
+ },
+ selectedUpSales: state.selectedUpSales,
+ extrasTotalPrice: cubit.extrasTotalPrice,
+ children: [
+ isSelected
+ ? Text(
+ "remove_from_booking".tr(),
+ style: theme.textTheme.headlineSmall
+ ?.copyWith(color: Colors.white),
+ )
+ : Text(
+ "add_to_booking".tr(),
+ style: theme.textTheme.headlineSmall
+ ?.copyWith(color: Colors.white),
+ ),
+ isSelected
+ ? Text(
+ "-${"total_charge_value".tr(args: [
+ roomUpgradeList.roomUpgrade.price
+ ])}",
+ style: theme.textTheme.headlineSmall
+ ?.copyWith(color: Colors.white),
+ )
+ : Text(
+ "+${"total_charge_value".tr(args: [
+ roomUpgradeList.roomUpgrade.price
+ ])}",
+ style: theme.textTheme.headlineSmall
+ ?.copyWith(color: Colors.white),
+ ),
+ ],
+ ),
+ ],
+ ),
+ );
+ },
+ );
+ }
+}
diff --git a/comwell_key_app/lib/up_sales/pages/up_sales_processing_page.dart b/comwell_key_app/lib/up_sales/pages/up_sales_processing_page.dart
index cedc0d08..a0ee6341 100644
--- a/comwell_key_app/lib/up_sales/pages/up_sales_processing_page.dart
+++ b/comwell_key_app/lib/up_sales/pages/up_sales_processing_page.dart
@@ -48,7 +48,7 @@ class _UpSalesProcessingPageState extends State<UpSalesProcessingPage>
markerEnd: "error",
);
await Future<void>.delayed(const Duration(seconds: 1));
- if (mounted) context.goNamed(AppRoutes.bookingDetails.name);
+ if (mounted) context.goNamed(AppRoutes.upSalesCatalog.name);
}
Future<void> _startConfirmation() async {
diff --git a/comwell_key_app/lib/up_sales/up_sales_catalog.dart b/comwell_key_app/lib/up_sales/up_sales_catalog.dart
index bca9c0a0..7c8c6396 100644
--- a/comwell_key_app/lib/up_sales/up_sales_catalog.dart
+++ b/comwell_key_app/lib/up_sales/up_sales_catalog.dart
@@ -61,17 +61,25 @@ class UpSalesCatalog extends StatelessWidget {
),
const SizedBox(height: 8),
ServiceCatalog(
- upSales: cubit.upSales,
- selectedUpSales: cubit.state.selectedUpSales,
- onTap: (roomUpgrade) {
- final isSelected =
- cubit.state.selectedUpSales.contains(roomUpgrade);
- if (isSelected) {
- cubit.removeUpgrade(roomUpgrade);
- } else {
- cubit.addSelected(roomUpgrade);
- }
- }),
+ upSales: cubit.upSales,
+ selectedUpSales: cubit.state.selectedUpSales,
+ onServiceSelected: (roomUpgrade, isSelected) {
+ if (isSelected) {
+ cubit.removeUpgrade(roomUpgrade);
+ } else {
+ cubit.addSelected(roomUpgrade);
+ }
+ },
+ onTap: (roomUpgrade) {
+ final isSelected =
+ cubit.state.selectedUpSales.contains(roomUpgrade);
+ if (isSelected) {
+ cubit.removeUpgrade(roomUpgrade);
+ } else {
+ cubit.addSelected(roomUpgrade);
+ }
+ },
+ ),
const SizedBox(height: 24),
Padding(
padding: const EdgeInsets.symmetric(horizontal: 16),
@@ -103,7 +111,7 @@ class UpSalesCatalog extends StatelessWidget {
),
),
const SizedBox(height: 24),
- Padding(
+ Padding(
padding: const EdgeInsets.symmetric(horizontal: 16),
child: Text('other_up_sales'.tr(),
style: theme.textTheme.headlineMedium),
@@ -139,15 +147,19 @@ class UpSalesCatalog extends StatelessWidget {
),
bottomNavigationBar: Column(mainAxisSize: MainAxisSize.min, children: [
const Divider(color: colorDivider),
- UpSalesBottomButton(onContinue: cubit.onContinue, selectedUpSales: cubit.state.selectedUpSales, extrasTotalPrice: cubit.extrasTotalPrice, children: [
- Text(
- cubit.state.selectedUpSales.isEmpty
- ? "continue_without_up_sales".tr()
- : "generic_continue".tr(),
- style:
- theme.textTheme.headlineSmall?.copyWith(color: Colors.white),
- ),
- ]),
+ UpSalesBottomButton(
+ onContinue: cubit.onContinue,
+ selectedUpSales: cubit.state.selectedUpSales,
+ extrasTotalPrice: cubit.extrasTotalPrice,
+ children: [
+ Text(
+ cubit.state.selectedUpSales.isEmpty
+ ? "continue_without_up_sales".tr()
+ : "generic_continue".tr(),
+ style: theme.textTheme.headlineSmall
+ ?.copyWith(color: Colors.white),
+ ),
+ ]),
]),
);
});