diff --git a/lib/views/branches/components/items_list_sheet.dart b/lib/views/branches/components/items_list_sheet.dart index 92cb113..3da3178 100644 --- a/lib/views/branches/components/items_list_sheet.dart +++ b/lib/views/branches/components/items_list_sheet.dart @@ -1,18 +1,18 @@ import 'dart:async'; +import 'package:easy_localization/easy_localization.dart'; +import 'package:flutter/material.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/services_models/item_model.dart'; +import 'package:mc_common_app/theme/colors.dart'; import 'package:mc_common_app/utils/date_helper.dart'; import 'package:mc_common_app/utils/enums.dart'; import 'package:mc_common_app/view_models/appointments_view_model.dart'; -import 'package:flutter/material.dart'; -import 'package:mc_common_app/extensions/int_extensions.dart'; -import 'package:mc_common_app/extensions/string_extensions.dart'; -import 'package:mc_common_app/theme/colors.dart'; import 'package:mc_common_app/widgets/empty_widget.dart'; import 'package:mc_common_app/widgets/extensions/extensions_widget.dart'; import 'package:provider/provider.dart'; -import 'package:easy_localization/easy_localization.dart'; class ItemsListSheet extends StatefulWidget { final int serviceProviderServiceId; @@ -27,7 +27,7 @@ class _ItemsListSheetState extends State { void initState() { super.initState(); scheduleMicrotask(() { - context.read().getServiceItems(widget.serviceProviderServiceId); + context.read().getServiceItems(serviceId: widget.serviceProviderServiceId); }); } @@ -61,7 +61,8 @@ class _ItemsListSheetState extends State { serviceItemModel.description.toString().toText(fontSize: 12, color: MyColors.lightTextColor), 8.height, if (serviceItemModel.manufactureDate != null && serviceItemModel.manufactureDate!.isNotEmpty) ...[ - showItem(LocaleKeys.manufacturedOn.tr() + ":", (DateHelper.formatAsDayMonthYear(DateHelper.parseStringToDate(serviceItemModel.manufactureDate!))), valueColor: MyColors.darkTextColor), + showItem(LocaleKeys.manufacturedOn.tr() + ":", (DateHelper.formatAsDayMonthYear(DateHelper.parseStringToDate(serviceItemModel.manufactureDate!))), + valueColor: MyColors.darkTextColor), ], showItem(LocaleKeys.availableforAppointment.tr() + ":", (serviceItemModel.isAllowAppointment ?? false) ? "Yes" : "No", valueColor: Colors.green), showItem(LocaleKeys.allowingWorkshopService.tr() + ":", (serviceItemModel.isAppointmentCompanyLoc ?? false) ? "Yes" : "No", valueColor: Colors.green), diff --git a/lib/views/dashboard/dashboard_view.dart b/lib/views/dashboard/dashboard_view.dart index 5a51fa3..7c339a0 100644 --- a/lib/views/dashboard/dashboard_view.dart +++ b/lib/views/dashboard/dashboard_view.dart @@ -1,15 +1,16 @@ import 'dart:async'; -import 'dart:developer'; + import 'package:car_customer_app/views/dashboard/fragments/appointments_fragment.dart'; import 'package:car_customer_app/views/dashboard/fragments/home_fragment.dart'; import 'package:car_customer_app/views/dashboard/widgets/bottom_nav_bar.dart'; import 'package:flutter/material.dart'; import 'package:mc_common_app/utils/enums.dart'; import 'package:mc_common_app/view_models/dashboard_view_model_customer.dart'; +import 'package:mc_common_app/views/common_fragments/ads_fragment.dart'; import 'package:mc_common_app/views/common_fragments/requests_fragment.dart'; import 'package:provider/provider.dart'; + import 'fragments/branches_fragment.dart'; -import 'package:mc_common_app/views/common_fragments/ads_fragment.dart'; class DashboardView extends StatefulWidget { final DashboardRouteEnum dashboardRouteEnum; @@ -27,7 +28,7 @@ class _DashboardViewState extends State { @override void initState() { super.initState(); - dashboardVM = Provider.of(context, listen: false); + dashboardVM = context.read(); scheduleMicrotask(() => dashboardVM.onRefresh(context, dashboardRouteEnum: widget.dashboardRouteEnum)); } diff --git a/lib/views/dashboard/fragments/branches_fragment.dart b/lib/views/dashboard/fragments/branches_fragment.dart index eb01a1a..2265acc 100644 --- a/lib/views/dashboard/fragments/branches_fragment.dart +++ b/lib/views/dashboard/fragments/branches_fragment.dart @@ -48,10 +48,10 @@ class BranchesFragment extends StatelessWidget { height: double.infinity, child: Column( children: [ - if (appointmentsVM.branchesFilterOptions.isNotEmpty) ...[ + if (appointmentsVM.branchesCategoriesFilterOptions.isNotEmpty) ...[ 16.height, FiltersList( - filterList: appointmentsVM.branchesFilterOptions, + filterList: appointmentsVM.branchesCategoriesFilterOptions, onFilterTapped: (index, selectedFilterId) => appointmentsVM.applyFilterOnBranches(index: index), ), ], diff --git a/lib/views/dashboard/fragments/home_fragment.dart b/lib/views/dashboard/fragments/home_fragment.dart index 7fd8a1d..5184911 100644 --- a/lib/views/dashboard/fragments/home_fragment.dart +++ b/lib/views/dashboard/fragments/home_fragment.dart @@ -1,5 +1,7 @@ import 'package:car_customer_app/views/dashboard/widgets/drawer_widget.dart'; import 'package:car_customer_app/views/dashboard/widgets/my_recent_branches_widget.dart'; +import 'package:car_customer_app/views/dashboard/widgets/my_services_categories_widget.dart'; +import 'package:easy_localization/easy_localization.dart'; import 'package:flutter/material.dart'; import 'package:mc_common_app/config/routes.dart'; import 'package:mc_common_app/extensions/int_extensions.dart'; @@ -15,7 +17,6 @@ import 'package:mc_common_app/widgets/common_widgets/app_bar.dart'; import 'package:mc_common_app/widgets/common_widgets/view_all_widget.dart'; import 'package:mc_common_app/widgets/extensions/extensions_widget.dart'; import 'package:provider/provider.dart'; -import 'package:easy_localization/easy_localization.dart'; class HomeFragment extends StatelessWidget { const HomeFragment({Key? key}) : super(key: key); @@ -67,51 +68,80 @@ class HomeFragment extends StatelessWidget { context.read().applyFilterOnAppointmentsVM(appointmentStatusEnum: AppointmentStatusEnum.allAppointments); }, ).horPaddingMain(), - CommonAppointmentSliderWidget().toWhiteContainer(width: double.infinity, backgroundColor: Colors.transparent).margin( - left: 21, - right: 21, - ), - 7.height, + CommonAppointmentSliderWidget() + .toWhiteContainer( + width: double.infinity, + backgroundColor: Colors.transparent, + ) + .margin(left: 21, right: 21), + + // SERVICES SECTION + 14.height, Consumer( builder: (BuildContext context, AppointmentsVM appointmentVM, Widget? child) { if (appointmentVM.state == ViewState.busy) { return Center(child: CircularProgressIndicator()); } - - if (appointmentVM.myRecentBranches.isNotEmpty) { + if (appointmentVM.branchesCategoriesFilterOptions.isNotEmpty) { return Column( children: [ ViewAllWidget( - title: LocaleKeys.myRecentBranches.tr().toUpperCase(), + title: LocaleKeys.services.tr().toUpperCase(), subTitle: '', - onSubtitleTapped: () { - // context.read().onNavbarTapped(0); - // context.read().applyFilterOnBranches(index: 0); - }, - ).horPaddingMain(), - MyRecentBranchesWidget(nearbyBranches: appointmentVM.myRecentBranches).horPaddingMain(), - ], - ); - } - if (appointmentVM.nearbyBranches.isNotEmpty) { - return Column( - children: [ - ViewAllWidget( - title: LocaleKeys.myNearbyBranches.tr().toUpperCase(), - subTitle: LocaleKeys.view_all.tr(), - onSubtitleTapped: () { - context.read().onNavbarTapped(0); - context.read().applyFilterOnBranches(index: 0); - }, + onSubtitleTapped: () {}, ).horPaddingMain(), - MyRecentBranchesWidget(nearbyBranches: appointmentVM.nearbyBranches).horPaddingMain(), + MyServicesCategoriesWidget(homeCategories: appointmentVM.branchesCategoriesFilterOptions).horPaddingMain() ], ); } - return SizedBox(); }, ), + + // NEARBY BRANCHES SECTION + // 7.height, + // Consumer( + // builder: (BuildContext context, AppointmentsVM appointmentVM, Widget? child) { + // if (appointmentVM.state == ViewState.busy) { + // return Center(child: CircularProgressIndicator()); + // } + // + // if (appointmentVM.myRecentBranches.isNotEmpty) { + // return Column( + // children: [ + // ViewAllWidget( + // title: LocaleKeys.myRecentBranches.tr().toUpperCase(), + // subTitle: '', + // onSubtitleTapped: () { + // // context.read().onNavbarTapped(0); + // // context.read().applyFilterOnBranches(index: 0); + // }, + // ).horPaddingMain(), + // MyRecentBranchesWidget(nearbyBranches: appointmentVM.myRecentBranches).horPaddingMain(), + // ], + // ); + // } + // if (appointmentVM.nearbyBranches.isNotEmpty) { + // return Column( + // children: [ + // ViewAllWidget( + // title: LocaleKeys.myNearbyBranches.tr().toUpperCase(), + // subTitle: LocaleKeys.view_all.tr(), + // onSubtitleTapped: () { + // context.read().onNavbarTapped(0); + // context.read().applyFilterOnBranches(index: 0); + // }, + // ).horPaddingMain(), + // MyRecentBranchesWidget(nearbyBranches: appointmentVM.nearbyBranches).horPaddingMain(), + // ], + // ); + // } + // + // return SizedBox(); + // }, + // ), + + // ADS SECTION Consumer( builder: (BuildContext context, AdVM adVM, Widget? child) { if (adVM.state == ViewState.busy) { diff --git a/lib/views/dashboard/widgets/my_services_categories_widget.dart b/lib/views/dashboard/widgets/my_services_categories_widget.dart new file mode 100644 index 0000000..4963163 --- /dev/null +++ b/lib/views/dashboard/widgets/my_services_categories_widget.dart @@ -0,0 +1,58 @@ +import 'package:flutter/material.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/general_models/widgets_models.dart'; +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/widgets/extensions/extensions_widget.dart'; +import 'package:provider/provider.dart'; + +class MyServicesCategoriesWidget extends StatelessWidget { + final List homeCategories; + + const MyServicesCategoriesWidget({Key? key, required this.homeCategories}) : super(key: key); + + @override + Widget build(BuildContext context) { + return SizedBox( + width: double.infinity, + height: 140, + child: ListView.builder( + itemCount: homeCategories.length, + scrollDirection: Axis.horizontal, + shrinkWrap: true, + itemBuilder: (BuildContext context, int index) { + FilterListModel category = homeCategories[index]; + if (category.id == 0) { + return SizedBox(); + } + return SizedBox( + width: 90, + child: Column( + children: [ + category.iconUrl.buildNetworkImage(height: 73, width: 73, fit: BoxFit.cover).toCircle(borderRadius: 100), + 9.height, + Flexible( + child: category.title.toText( + fontSize: 14, + textAlign: TextAlign.center, + maxLines: 2, + overflow: TextOverflow.ellipsis, + letterSpacing: -0.84, + height: 18 / 14, + ), + ), + ], + ), + ).onPress(() { + final appointmentVM = context.read(); + final dashboardCustomerVM = context.read(); + context.read().onNavbarTapped(0); + dashboardCustomerVM.onNavbarTapped(0); + appointmentVM.applyFilterOnBranches(index: index); + }); + }, + ), + ); + } +} diff --git a/pubspec.yaml b/pubspec.yaml index 8113756..9e22cf6 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -84,3 +84,4 @@ flutter: # - asset: assets/fonts/Poppins-Medium.ttf # For details regarding fonts from package dependencies, # see https://flutter.dev/custom-fonts/#from-packages +