import 'package:car_customer_app/view_models/appointments_view_model.dart'; import 'package:car_customer_app/views/appointments/widgets/appointment_service_pick_bottom_sheet.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/widgets_models.dart'; import 'package:mc_common_app/theme/colors.dart'; import 'package:mc_common_app/utils/navigator.dart'; import 'package:mc_common_app/views/advertisement/custom_add_button.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/common_widgets/info_bottom_sheet.dart'; import 'package:mc_common_app/widgets/common_widgets/time_slots.dart'; import 'package:mc_common_app/widgets/extensions/extensions_widget.dart'; import 'package:provider/provider.dart'; class BookAppointmentServicesView extends StatelessWidget { BookAppointmentServicesView({Key? key}) : super(key: key); void openTheAddServiceBottomSheet(BuildContext context, AppointmentsVM appointmentsVM) { showModalBottomSheet( context: context, isScrollControlled: true, enableDrag: true, builder: (BuildContext context) { return AppointmentServicePickBottomSheet(); }, ); } final _dummySlots = [ TimeSlotModel(isSelected: false, slotId: 1, slot: "11:00"), TimeSlotModel(isSelected: false, slotId: 2, slot: "12:00"), TimeSlotModel(isSelected: true, slotId: 3, slot: "13:00"), TimeSlotModel(isSelected: false, slotId: 4, slot: "14:00"), TimeSlotModel(isSelected: false, slotId: 5, slot: "15:00"), TimeSlotModel(isSelected: false, slotId: 6, slot: "16:00"), TimeSlotModel(isSelected: false, slotId: 7, slot: "17:00"), TimeSlotModel(isSelected: false, slotId: 8, slot: "18:00"), TimeSlotModel(isSelected: false, slotId: 9, slot: "19:00"), TimeSlotModel(isSelected: false, slotId: 10, slot: "20:00"), TimeSlotModel(isSelected: false, slotId: 11, slot: "21:00"), TimeSlotModel(isSelected: false, slotId: 12, slot: "22:00"), TimeSlotModel(isSelected: false, slotId: 13, slot: "23:00"), TimeSlotModel(isSelected: false, slotId: 14, slot: "24:00"), TimeSlotModel(isSelected: false, slotId: 15, slot: "25:00"), TimeSlotModel(isSelected: false, slotId: 16, slot: "26:00"), TimeSlotModel(isSelected: false, slotId: 17, slot: "27:00"), TimeSlotModel(isSelected: false, slotId: 18, slot: "28:00"), TimeSlotModel(isSelected: false, slotId: 19, slot: "29:00"), ]; void priceBreakDownClicked(BuildContext context) { showModalBottomSheet( context: context, isScrollControlled: true, enableDrag: true, builder: (BuildContext context) { return InfoBottomSheet( title: "Charges Breakdown", description: Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ "Services".toText(fontSize: 16, isBold: true), Column( children: List.generate( 5, (index) => Row( mainAxisAlignment: MainAxisAlignment.spaceBetween, children: [ "Gear Kit".toText(fontSize: 12, color: MyColors.lightTextColor, isBold: true), "200 SAR".toText(fontSize: 12, isBold: true), ], ), ), ), Row( mainAxisAlignment: MainAxisAlignment.end, children: [ "1149 SAR".toText(fontSize: 16, isBold: true), ], ), 20.height, "Home Location".toText(fontSize: 16, isBold: true), Row( mainAxisAlignment: MainAxisAlignment.spaceBetween, children: [ "10km ".toText(fontSize: 12, color: MyColors.lightTextColor, isBold: true), "5 x 10".toText(fontSize: 12, isBold: true), ], ), 8.height, Row( mainAxisAlignment: MainAxisAlignment.end, children: [ "50 SAR".toText(fontSize: 16, isBold: true), ], ), 30.height, Row( mainAxisAlignment: MainAxisAlignment.spaceBetween, children: [ "Total Amount ".toText(fontSize: 16, isBold: true), 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), ], ) ], ), 30.height, ], )); }); } @override Widget build(BuildContext context) { return Scaffold( appBar: CustomAppBar( title: "Book Appointment", isRemoveBackButton: false, isDrawerEnabled: false, actions: [MyAssets.searchIcon.buildSvg().paddingOnly(right: 21)], onBackButtonTapped: () => Navigator.pop(context), ), body: Consumer( builder: (BuildContext context, AppointmentsVM appointmentsVM, Widget? child) { return Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ 21.height, CustomAddButton( onTap: () => openTheAddServiceBottomSheet(context, appointmentsVM), text: "Add Services", icon: Container( height: 24, width: 24, decoration: const BoxDecoration(shape: BoxShape.circle, color: MyColors.darkTextColor), child: const Icon(Icons.add, color: MyColors.white), ), ).horPaddingMain(), 10.height, ListView.builder( shrinkWrap: true, itemCount: 20, itemBuilder: (BuildContext context, int index) { return Column( children: [ Row( mainAxisAlignment: MainAxisAlignment.spaceBetween, children: [ Expanded( child: "Mechanic".toText(fontSize: 16, isBold: true), ), Align( alignment: Alignment.topRight, child: MyAssets.icEdit.buildSvg(fit: BoxFit.fill, height: 19, width: 19), ).onPress(() {}), ], ), Builder(builder: (context) { return Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ if (true) ...[ Row( crossAxisAlignment: CrossAxisAlignment.start, children: [ "Service Location: ".toText(fontSize: 12, color: MyColors.lightTextColor, isBold: true), ("Home").toText(fontSize: 12, isBold: true).expand(), ], ), 8.height, Column( children: List.generate( 5, (index) => Row( crossAxisAlignment: CrossAxisAlignment.start, children: [ "Gear Kit: ".toText(fontSize: 12, color: MyColors.lightTextColor, isBold: true), ("200 SAR").toText(fontSize: 12, isBold: true).expand(), ], ), ), ), 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)), ], if (true) ...[ 8.height, ("Available Slots").toText(fontSize: 14, isBold: true), 5.height, SizedBox( width: double.infinity, child: BuildTimeSlots( timeSlots: _dummySlots, onPressed: (index) => null, ), ), ], ], ); }), ], ).toWhiteContainer(width: double.infinity, allPading: 12, margin: const EdgeInsets.symmetric(horizontal: 21, vertical: 10)); }, ).expand(), Row( children: [ Expanded( child: ShowFillButton( txtColor: MyColors.black, maxHeight: 55, title: "Cancel", onPressed: () {}, backgroundColor: MyColors.greyButtonColor, ), ), 12.width, Expanded( child: ShowFillButton( maxHeight: 55, title: "Review", onPressed: () { navigateWithName(context, AppRoutes.reviewAppointmentView); }, backgroundColor: MyColors.darkPrimaryColor, ), ) ], ).paddingAll(21) ], ); }, )); } }