import 'package:mc_common_app/view_models/appointments_view_model.dart'; import 'package:mc_common_app/view_models/dashboard_view_model_customer.dart'; import 'package:mc_common_app/views/appointments/widgets/customer_appointment_slider_widget.dart'; import 'package:flutter/material.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/appointments_models/appointment_list_model.dart'; import 'package:mc_common_app/theme/colors.dart'; import 'package:mc_common_app/utils/enums.dart'; import 'package:mc_common_app/utils/navigator.dart'; import 'package:mc_common_app/widgets/common_widgets/categories_list.dart'; import 'package:provider/provider.dart'; class AppointmentsFragment extends StatelessWidget { const AppointmentsFragment({Key? key}) : super(key: key); @override Widget build(BuildContext context) { return Scaffold( body: Container( color: MyColors.backgroundColor, width: double.infinity, height: double.infinity, child: Consumer( builder: (BuildContext context, AppointmentsVM appointmentsVM, Widget? child) { return Column( children: [ 16.height, FiltersList( filterList: appointmentsVM.appointmentsFilterOptions, onFilterTapped: (index, selectedFilterId) { appointmentsVM.applyFilterOnAppointmentsVM(appointmentStatusEnum: selectedFilterId.toAppointmentStatusEnum()); }), 16.height, Expanded( child: RefreshIndicator( onRefresh: () async { appointmentsVM.getMyAppointments(isNeedToRebuild: true); }, child: appointmentsVM.state == ViewState.busy ? const Center(child: CircularProgressIndicator()) : appointmentsVM.myFilteredAppointments.isEmpty ? Column( mainAxisAlignment: MainAxisAlignment.center, children: [ "No Appointments to show.".toText(fontSize: 16, color: MyColors.lightTextColor), ], ) : ListView.builder( shrinkWrap: true, itemCount: appointmentsVM.myFilteredAppointments.length, itemBuilder: (BuildContext context, int index) { return BuildAppointmentContainerForCustomer( onTapped: () { AppointmentListModel appointmentModel = appointmentsVM.myFilteredAppointments[index]; appointmentModel.appointmentServicesList!.forEach((service) { double totalServicePrice = 0.0; service.serviceItems!.forEach((item) { totalServicePrice = totalServicePrice + (double.parse("${item.price ?? 0.0}")); }); service.currentTotalServicePrice = totalServicePrice; }); navigateWithName(context, AppRoutes.appointmentDetailView, arguments: appointmentModel); }, appointmentListModel: appointmentsVM.myFilteredAppointments[index], ); }, ), ), ), ], ); }, ), ), floatingActionButton: FloatingActionButton( onPressed: () async { context.read().onNavbarTapped(0); }, backgroundColor: MyColors.darkPrimaryColor, child: Icon( Icons.add, color: MyColors.white, ), ), ); } }