diff --git a/lib/repositories/schedule_repo.dart b/lib/repositories/schedule_repo.dart index 7edfe49..7938095 100644 --- a/lib/repositories/schedule_repo.dart +++ b/lib/repositories/schedule_repo.dart @@ -6,6 +6,7 @@ import 'package:mc_common_app/models/generic_resp_model.dart'; import 'package:mc_common_app/models/m_response.dart'; import 'package:mc_common_app/models/provider_branches_models/profile/services.dart'; import 'package:mc_common_app/models/schedule_model.dart'; +import 'package:mc_common_app/models/service_schedule_model.dart'; abstract class ScheduleRepo { Future getAllServices(String branchId); @@ -19,6 +20,8 @@ abstract class ScheduleRepo { Future> getSchedules(String branchId); Future updateServicesInSchedule(Map map); + + Future> mergeServiceIntoAvailableSchedules({required List serviceItemIds}); } class ScheduleRepoImp implements ScheduleRepo { @@ -67,4 +70,19 @@ class ScheduleRepoImp implements ScheduleRepo { String t = AppState().getUser.data!.accessToken ?? ""; return await injector.get().postJsonForObject((json) => MResponse.fromJson(json), ApiConsts.updateGroup, map, token: t); } + + Future> mergeServiceIntoAvailableSchedules({required List serviceItemIds}) async { + String t = AppState().getUser.data!.accessToken ?? ""; + var dummyServiceIds = ["3", "2"]; + var queryParameters = {"ServiceItemIDs": dummyServiceIds}; + GenericRespModel adsGenericModel = await injector.get().getJsonForObject( + (json) => GenericRespModel.fromJson(json), + ApiConsts.GetServiceItemAppointmentScheduleSlots, + token: t, + queryParameters: queryParameters, + ); + List serviceAppointmentScheduleModel = + List.generate(adsGenericModel.data.length, (index) => ServiceAppointmentScheduleModel.fromJson(adsGenericModel.data[index])); + return serviceAppointmentScheduleModel; + } } diff --git a/lib/view_models/appointments_view_model.dart b/lib/view_models/appointments_view_model.dart index f3beb92..08889a9 100644 --- a/lib/view_models/appointments_view_model.dart +++ b/lib/view_models/appointments_view_model.dart @@ -1,12 +1,10 @@ -import 'dart:developer'; - import 'package:car_customer_app/repositories/provider_repo.dart'; import 'package:car_customer_app/repositories/schedule_repo.dart'; import 'package:mc_common_app/classes/consts.dart'; import 'package:mc_common_app/models/appointments_models/appointment_list_model.dart'; import 'package:mc_common_app/models/provider_branches_models/branch_detail_model.dart'; import 'package:mc_common_app/models/provider_branches_models/provider_profile_model.dart'; -import 'package:mc_common_app/models/schedule_model.dart'; +import 'package:mc_common_app/models/service_schedule_model.dart'; import 'package:mc_common_app/models/services/item_model.dart'; import 'package:mc_common_app/models/services/service_model.dart'; import 'package:mc_common_app/models/widgets_models.dart'; @@ -29,7 +27,7 @@ class AppointmentsVM extends BaseVM { List myAppointments = []; List appointmentsFilterOptions = []; - List availableSchedules = []; + // List availableSchedules = []; bool isFetchingServices = false; @@ -37,12 +35,44 @@ class AppointmentsVM extends BaseVM { bool isHomeTapped = false; - Future getSchedulesByBranchId() async { - availableSchedules = await scheduleRepo.getSchedules(selectedBranchModel!.id!.toString()); - log("schedules: ${availableSchedules.toString()}"); + List serviceAppointmentScheduleList = []; + + // Future getSchedulesByBranchId() async { + // availableSchedules = await scheduleRepo.getSchedules(selectedBranchModel!.id!.toString()); + // log("schedules: ${availableSchedules.toString()}"); + // notifyListeners(); + // } + + List servicesInSchedule = []; + + Future mergeServiceIntoAvailableSchedules() async { + List serviceItemIds = []; + serviceItems.forEach((serviceItem) { + if (serviceItem.isUpdateOrSelected!) { + serviceItemIds.add(serviceItem.id!.toString()); + } + }); + var scheduleList = await scheduleRepo.mergeServiceIntoAvailableSchedules(serviceItemIds: serviceItemIds); + serviceAppointmentScheduleList.addAll(scheduleList); + servicesInSchedule.clear(); + serviceAppointmentScheduleList.forEach((schedule) { + schedule.serviceItemList!.forEach((item) { + if (!ifItemAlreadyThere(item.serviceProviderServiceId!)) { + servicesInSchedule.add(DropValue(item.serviceProviderServiceId!, item.description!, "")); + } + }); + }); notifyListeners(); } + bool ifItemAlreadyThere(int id) { + int index = servicesInSchedule.indexWhere((element) => element.id == id); + if (index == -1) { + return false; + } + return true; + } + void updateIsHomeTapped(bool value) { isHomeTapped = value; notifyListeners(); @@ -228,7 +258,6 @@ class AppointmentsVM extends BaseVM { List getFilteredBranchServices({required int categoryId}) { List filteredServices = selectedBranchModel!.branchServices!.where((element) => element.categoryId == categoryId).toList(); - log("returning: ${filteredServices.toString()}"); return filteredServices; } @@ -262,12 +291,26 @@ class AppointmentsVM extends BaseVM { return false; } - void mergeServiceInAvailableSchedule() { - for (var schedule in availableSchedules) { - for (var service in schedule.scheduleServices!) { - if (branchSelectedServiceId.selectedId == service.serviceId) {} - schedule.selectedServices!.add(currentServiceSelection!); - } - } - } +// void mergeServiceInAvailableSchedule() { +// log("schedules: ${availableSchedules}"); +// for (var schedule in availableSchedules) { +// for (var service in schedule.scheduleServices!) { +// if (branchSelectedServiceId.selectedId == service.serviceId) { +// log("ID matched: ${service.serviceId}"); +// log("SelectedServices: ${schedule.selectedServices}"); +// +// +// int isAlreadyThereIndex = schedule.selectedServices!.indexWhere((element) => element.serviceProviderServiceId == branchSelectedServiceId.selectedId); +// if (isAlreadyThereIndex != -1) { +// log("removing: ${service.serviceId}"); +// schedule.selectedServices!.removeAt(isAlreadyThereIndex); +// } +// schedule.selectedServices!.add(currentServiceSelection!); +// notifyListeners(); +// return; +// } +// } +// } +// notifyListeners(); +// } } diff --git a/lib/views/appointments/book_appointment_services_view.dart b/lib/views/appointments/book_appointment_services_view.dart index 186c40f..6fe778d 100644 --- a/lib/views/appointments/book_appointment_services_view.dart +++ b/lib/views/appointments/book_appointment_services_view.dart @@ -5,9 +5,8 @@ import 'package:mc_common_app/classes/consts.dart'; import 'package:mc_common_app/config/routes.dart'; import 'package:mc_common_app/extensions/int_extensions.dart'; import 'package:mc_common_app/extensions/string_extensions.dart'; -import 'package:mc_common_app/models/schedule_model.dart'; +import 'package:mc_common_app/models/service_schedule_model.dart'; import 'package:mc_common_app/models/services/item_model.dart'; -import 'package:mc_common_app/models/services/service_model.dart'; import 'package:mc_common_app/models/widgets_models.dart'; import 'package:mc_common_app/theme/colors.dart'; import 'package:mc_common_app/utils/navigator.dart'; @@ -16,6 +15,7 @@ import 'package:mc_common_app/widgets/button/show_fill_button.dart'; import 'package:mc_common_app/widgets/common_widgets/app_bar.dart'; import 'package:mc_common_app/widgets/common_widgets/info_bottom_sheet.dart'; import 'package:mc_common_app/widgets/common_widgets/time_slots.dart'; +import 'package:mc_common_app/widgets/dropdown/dropdow_field.dart'; import 'package:mc_common_app/widgets/extensions/extensions_widget.dart'; import 'package:provider/provider.dart'; @@ -122,6 +122,14 @@ class BookAppointmentServicesView extends StatelessWidget { }); } + String getTotalPrice(List serviceItems) { + var totalPrice = 0.0; + serviceItems.forEach((element) { + totalPrice = totalPrice + double.parse(element.price ?? "0.0"); + }); + return totalPrice.toString(); + } + @override Widget build(BuildContext context) { return Scaffold( @@ -151,24 +159,44 @@ class BookAppointmentServicesView extends StatelessWidget { 10.height, ListView.builder( shrinkWrap: true, - itemCount: appointmentsVM.availableSchedules.where((element) => element.selectedServices!.isNotEmpty).toList().length, + itemCount: appointmentsVM.serviceAppointmentScheduleList.length, itemBuilder: (BuildContext context, int scheduleIndex) { - ScheduleData scheduleData = appointmentsVM.availableSchedules.where((element) => element.selectedServices!.isNotEmpty).toList()[scheduleIndex]; + ServiceAppointmentScheduleModel scheduleData = appointmentsVM.serviceAppointmentScheduleList[scheduleIndex]; return Column( children: [ Row( mainAxisAlignment: MainAxisAlignment.spaceBetween, children: [ Expanded( - child: "Schedule: ${scheduleData.scheduleName}".toText(fontSize: 20, isBold: true), + child: "Schedule: ${scheduleIndex + 1}".toText(fontSize: 20, isBold: true), ), Align( alignment: Alignment.topRight, - child: MyAssets.icEdit.buildSvg(fit: BoxFit.fill, height: 19, width: 19), + child: Icon( + Icons.delete_outline, + size: 28, + ), ).onPress(() {}), ], ), if (true) ...[ + 5.height, + Row( + mainAxisAlignment: MainAxisAlignment.start, + children: [ + ("Available Dates").toText(fontSize: 14, isBold: true), + ], + ), + 5.height, + SizedBox( + width: double.infinity, + child: BuildTimeSlots( + timeSlots: scheduleData.availableDates!, + onPressed: (index) => null, + ), + ), + ], + if (scheduleData.selectedDate!.isNotEmpty) ...[ 5.height, Row( mainAxisAlignment: MainAxisAlignment.start, @@ -192,15 +220,15 @@ class BookAppointmentServicesView extends StatelessWidget { ListView.separated( physics: NeverScrollableScrollPhysics(), shrinkWrap: true, - itemCount: scheduleData.selectedServices!.length, + itemCount: appointmentsVM.servicesInSchedule.length, itemBuilder: (BuildContext context, int serviceIndex) { - ServiceModel selectedService = scheduleData.selectedServices![serviceIndex]; + DropValue selectedService = appointmentsVM.servicesInSchedule[serviceIndex]; return Column( children: [ Row( children: [ Expanded( - child: "${selectedService.serviceDescription}".toText(fontSize: 15, isBold: true), + child: selectedService.value.toText(fontSize: 15, isBold: true), ), ], ), @@ -212,10 +240,10 @@ class BookAppointmentServicesView extends StatelessWidget { ("Home").toText(fontSize: 12, isBold: true).expand(), ], ), - 8.height, + 5.height, Column( - children: List.generate(scheduleData.selectedServices![serviceIndex].serviceItems!.length, (itemIndex) { - ItemData itemData = selectedService.serviceItems![itemIndex]; + children: List.generate(scheduleData.serviceItemList!.length, (itemIndex) { + ItemData itemData = scheduleData.serviceItemList![itemIndex]; return Row( crossAxisAlignment: CrossAxisAlignment.start, children: [ @@ -225,25 +253,25 @@ class BookAppointmentServicesView extends StatelessWidget { ); }), ), - 8.height, - Row( - crossAxisAlignment: CrossAxisAlignment.end, - children: [ - "120".toText(fontSize: 29, isBold: true), - 2.width, - "SAR".toText(color: MyColors.lightTextColor, fontSize: 16, isBold: true).paddingOnly(bottom: 5), - Icon( - Icons.arrow_drop_down, - size: 30, - ) - ], - ).onPress(() => priceBreakDownClicked(context)), ], ], ); }, separatorBuilder: (BuildContext context, int index) => Divider(thickness: 2), - ) + ), + 8.height, + Row( + crossAxisAlignment: CrossAxisAlignment.end, + children: [ + getTotalPrice(appointmentsVM.serviceAppointmentScheduleList[scheduleIndex].serviceItemList ?? []).toText(fontSize: 32, isBold: true), + 2.width, + "SAR".toText(color: MyColors.lightTextColor, fontSize: 16, isBold: true).paddingOnly(bottom: 5), + Icon( + Icons.arrow_drop_down, + size: 30, + ) + ], + ).onPress(() => priceBreakDownClicked(context)), ], ), ], diff --git a/lib/views/appointments/book_appointments_item_view.dart b/lib/views/appointments/book_appointments_item_view.dart index d375465..2620166 100644 --- a/lib/views/appointments/book_appointments_item_view.dart +++ b/lib/views/appointments/book_appointments_item_view.dart @@ -2,6 +2,7 @@ import 'package:car_customer_app/view_models/appointments_view_model.dart'; import 'package:car_customer_app/views/appointments/widgets/service_item_with_price_checkbox.dart'; import 'package:flutter/material.dart'; import 'package:mc_common_app/classes/consts.dart'; +import 'package:mc_common_app/config/routes.dart'; import 'package:mc_common_app/extensions/int_extensions.dart'; import 'package:mc_common_app/extensions/string_extensions.dart'; import 'package:mc_common_app/models/services/item_model.dart'; @@ -68,7 +69,7 @@ class BookAppointmentsItemView extends StatelessWidget { title: itemData.name!, isSelected: itemData.isUpdateOrSelected!, onSelection: (bool value) { - appointmentsVM.onItemUpdateOrSelected(index, !itemData.isUpdateOrSelected!, itemData!.id!); + appointmentsVM.onItemUpdateOrSelected(index, !itemData.isUpdateOrSelected!, itemData.id!); }, priceWidget: Row( crossAxisAlignment: CrossAxisAlignment.end, @@ -112,25 +113,25 @@ class BookAppointmentsItemView extends StatelessWidget { ), 12.width, Expanded( - child: ShowFillButton( - maxHeight: 55, - title: "Next", - onPressed: () async { - bool resp = appointmentsVM.onSubServicesNextPressed(); - if (resp) { - Utils.showLoading(context); - if (appointmentsVM.availableSchedules.isEmpty) { - await appointmentsVM.getSchedulesByBranchId(); - } - appointmentsVM.mergeServiceInAvailableSchedule(); - Utils.hideLoading(context); - pop(context); - pop(context); - appointmentsVM.resetCategorySelectionBottomSheet(); + child: Builder( + builder: (BuildContext context) { + return ShowFillButton( + maxHeight: 55, + title: "Next", + onPressed: () async { + bool resp = appointmentsVM.onSubServicesNextPressed(); + if (resp) { + Utils.showLoading(context); + await appointmentsVM.mergeServiceIntoAvailableSchedules(); + appointmentsVM.resetCategorySelectionBottomSheet(); + Navigator.of(context).pushNamedAndRemoveUntil(AppRoutes.bookAppointmenServicesView, (Route route) => false); - } + // appointmentsVM.mergeServiceInAvailableSchedule(); + } + }, + backgroundColor: !appointmentsVM.isServiceSelectionValidated() ? MyColors.lightTextColor.withOpacity(0.6) : MyColors.primaryColor, + ); }, - backgroundColor: !appointmentsVM.isServiceSelectionValidated() ? MyColors.lightTextColor.withOpacity(0.6) : MyColors.primaryColor, ), ), ], diff --git a/lib/views/appointments/review_appointment_view.dart b/lib/views/appointments/review_appointment_view.dart index 96c8a88..841f4c0 100644 --- a/lib/views/appointments/review_appointment_view.dart +++ b/lib/views/appointments/review_appointment_view.dart @@ -1,23 +1,24 @@ +import 'package:car_customer_app/view_models/appointments_view_model.dart'; import 'package:easy_localization/easy_localization.dart'; import 'package:flutter/material.dart'; import 'package:mc_common_app/classes/consts.dart'; import 'package:mc_common_app/extensions/int_extensions.dart'; import 'package:mc_common_app/extensions/string_extensions.dart'; import 'package:mc_common_app/generated/locale_keys.g.dart'; +import 'package:mc_common_app/models/service_schedule_model.dart'; +import 'package:mc_common_app/models/services/item_model.dart'; import 'package:mc_common_app/theme/colors.dart'; import 'package:mc_common_app/widgets/button/show_fill_button.dart'; import 'package:mc_common_app/widgets/common_widgets/app_bar.dart'; +import 'package:mc_common_app/widgets/dropdown/dropdow_field.dart'; import 'package:mc_common_app/widgets/extensions/extensions_widget.dart'; +import 'package:provider/provider.dart'; class ReviewAppointment extends StatelessWidget { const ReviewAppointment({Key? key}) : super(key: key); - Widget buildBranchInfoCard({ - required String branchImageUrl, - required String branchName, - required String branchRatings, - required String branchLocation, - }) { + Widget buildBranchInfoCard({required BuildContext context}) { + AppointmentsVM appointmentsVM = context.read(); return Padding( padding: const EdgeInsets.only( bottom: 10, @@ -27,7 +28,7 @@ class ReviewAppointment extends StatelessWidget { child: Row( children: [ Image.asset( - branchImageUrl, + MyAssets.bnCar, width: 80, height: 60, fit: BoxFit.cover, @@ -46,12 +47,12 @@ class ReviewAppointment extends StatelessWidget { crossAxisAlignment: CrossAxisAlignment.start, mainAxisAlignment: MainAxisAlignment.start, children: [ - branchName.toText(fontSize: 16, isBold: true), + (appointmentsVM.selectedBranchModel!.branchName ?? "").toText(fontSize: 16, isBold: true), Row( children: [ LocaleKeys.location.tr().toText(color: MyColors.lightTextColor, fontSize: 12), 2.width, - ":$branchLocation".toText(fontSize: 12), + ": ${appointmentsVM.selectedBranchModel!.branchDescription ?? ""}".toText(fontSize: 12), ], ), ], @@ -60,7 +61,7 @@ class ReviewAppointment extends StatelessWidget { Row( mainAxisAlignment: MainAxisAlignment.start, children: [ - branchRatings.toText( + "4.9".toText( isUnderLine: true, isBold: true, fontSize: 12, @@ -78,44 +79,100 @@ class ReviewAppointment extends StatelessWidget { ).onPress(() {}).toWhiteContainer(width: double.infinity, allPading: 12)); } - Widget buildServicesSubSection({required String title, required List itemList}) { - return Column( - crossAxisAlignment: CrossAxisAlignment.start, - children: [ - title.toText(fontSize: 16, isBold: true), - Column( - crossAxisAlignment: CrossAxisAlignment.start, - children: List.generate( - itemList.length, - (index) => itemList[index].toText( - fontSize: 12, - color: MyColors.lightTextColor, - isBold: true, - )), - ), - ], - ).paddingOnly(bottom: 14); - } - - Widget buildServicesInfoCard() { - return SizedBox( - width: double.infinity, - child: Column( - crossAxisAlignment: CrossAxisAlignment.start, - children: List.generate( - 2, - (index) => buildServicesSubSection( - title: "Mechanic", - itemList: [ - "Engine Check : 450 SAR", - "Gear Check : 700 SAR", - "Gear Check : 700 SAR", - "Gear Check : 700 SAR", - ], - ), - ), - ).toWhiteContainer(width: double.infinity, allPading: 12, margin: EdgeInsets.symmetric(horizontal: 21)), + Widget buildServicesInfoCard({required BuildContext context}) { + AppointmentsVM appointmentsVM = context.read(); + return ListView.builder( + shrinkWrap: true, + itemCount: appointmentsVM.serviceAppointmentScheduleList.length, + itemBuilder: (BuildContext context, int scheduleIndex) { + ServiceAppointmentScheduleModel scheduleData = appointmentsVM.serviceAppointmentScheduleList[scheduleIndex]; + return Column( + children: [ + Row( + mainAxisAlignment: MainAxisAlignment.spaceBetween, + children: [ + Expanded( + child: "Schedule: ${scheduleIndex + 1}".toText(fontSize: 20, isBold: true), + ), + ], + ), + 10.height, + Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + ListView.separated( + physics: NeverScrollableScrollPhysics(), + shrinkWrap: true, + itemCount: appointmentsVM.servicesInSchedule.length, + itemBuilder: (BuildContext context, int serviceIndex) { + DropValue selectedService = appointmentsVM.servicesInSchedule[serviceIndex]; + return Column( + children: [ + Row( + children: [ + Expanded( + child: selectedService.value.toText(fontSize: 15, isBold: true), + ), + ], + ), + if (true) ...[ + Row( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + "Service Location: ".toText(fontSize: 12, color: MyColors.lightTextColor, isBold: true), + ("Home").toText(fontSize: 12, isBold: true).expand(), + ], + ), + 5.height, + Column( + children: List.generate(scheduleData.serviceItemList!.length, (itemIndex) { + ItemData itemData = scheduleData.serviceItemList![itemIndex]; + return Row( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + "${itemData.name}: ".toText(fontSize: 13, color: MyColors.lightTextColor, isBold: true), + ], + ); + }), + ), + ], + ], + ); + }, + separatorBuilder: (BuildContext context, int index) => Divider(thickness: 2), + ).paddingOnly(bottom: 10), + ], + ), + ], + ).toWhiteContainer(width: double.infinity, allPading: 12, margin: const EdgeInsets.symmetric(horizontal: 21, vertical: 10)); + }, ); + // AppointmentsVM appointmentsVM = context.read(); + // return SizedBox( + // width: double.infinity, + // child: Column( + // crossAxisAlignment: CrossAxisAlignment.start, + // children: List.generate( + // appointmentsVM.servicesInSchedule.length, + // (serviceIndex) => Column( + // crossAxisAlignment: CrossAxisAlignment.start, + // children: [ + // appointmentsVM.servicesInSchedule[serviceIndex].value.toText(fontSize: 16, isBold: true), + // Column( + // crossAxisAlignment: CrossAxisAlignment.start, + // children: List.generate( + // appointmentsVM, + // (index) => itemList[index].toText( + // fontSize: 12, + // color: MyColors.lightTextColor, + // isBold: true, + // )), + // ), + // ], + // ).paddingOnly(bottom: 14), + // ), + // ).toWhiteContainer(width: double.infinity, allPading: 12, margin: EdgeInsets.symmetric(horizontal: 21)), + // ); } Widget buildTimeAndLocationInfoCard() { @@ -139,19 +196,29 @@ class ReviewAppointment extends StatelessWidget { ); } - Widget buildChargesBreakDown() { + Widget buildChargesBreakDown({required BuildContext context}) { + AppointmentsVM appointmentsVM = context.read(); + List allSelectedItems = []; + double totalServicePrice = 0.0; + appointmentsVM.serviceAppointmentScheduleList.forEach((schedule) { + schedule.serviceItemList!.forEach((item) { + allSelectedItems.add(item); + totalServicePrice = totalServicePrice + double.parse(item.price!); + }); + }); + return Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ "Services".toText(fontSize: 16, isBold: true), Column( children: List.generate( - 5, + allSelectedItems.length, (index) => Row( mainAxisAlignment: MainAxisAlignment.spaceBetween, children: [ - "Gear Kit".toText(fontSize: 12, color: MyColors.lightTextColor, isBold: true), - "200 SAR".toText(fontSize: 12, isBold: true), + "${allSelectedItems[index].name}".toText(fontSize: 12, color: MyColors.lightTextColor, isBold: true), + "${allSelectedItems[index].price} SAR".toText(fontSize: 12, isBold: true), ], ), ), @@ -159,13 +226,11 @@ class ReviewAppointment extends StatelessWidget { Row( mainAxisAlignment: MainAxisAlignment.end, children: [ - "1149 SAR".toText(fontSize: 16, isBold: true), + "${totalServicePrice.toString()} SAR".toText(fontSize: 16, isBold: true), ], ), 10.height, - Divider( - thickness: 0.7, - ), + Divider(thickness: 0.7), "Home Location".toText(fontSize: 16, isBold: true), Row( mainAxisAlignment: MainAxisAlignment.spaceBetween, @@ -245,15 +310,10 @@ class ReviewAppointment extends StatelessWidget { child: Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ - buildBranchInfoCard( - branchImageUrl: MyAssets.bnCar, - branchLocation: " 3km", - branchName: "Al Ahmed Maintenance", - branchRatings: "4.9", - ), - buildServicesInfoCard(), + buildBranchInfoCard(context: context), + buildServicesInfoCard(context: context), buildTimeAndLocationInfoCard(), - buildChargesBreakDown(), + buildChargesBreakDown(context: context), ], ), ),