From df254615758d5f92d827751a947a4980991486ca Mon Sep 17 00:00:00 2001 From: Faiz Hashmi Date: Wed, 30 Oct 2024 18:05:47 +0300 Subject: [PATCH 1/4] Issues Fixed --- android/app/src/main/AndroidManifest.xml | 3 ++- lib/main.dart | 5 ++++- lib/views/branches/branch_detail_view.dart | 7 ++++++- lib/views/branches/components/items_list_sheet.dart | 4 ++-- 4 files changed, 14 insertions(+), 5 deletions(-) diff --git a/android/app/src/main/AndroidManifest.xml b/android/app/src/main/AndroidManifest.xml index 7b0be8a..e5e0717 100644 --- a/android/app/src/main/AndroidManifest.xml +++ b/android/app/src/main/AndroidManifest.xml @@ -5,7 +5,8 @@ - + + main() async { } CustomerDependencies.addDependencies(); - injector.get().initializeNotifications(); + injector.get().initializeNotifications().whenComplete(() { + injector.get().handleLocationPermission(); + }); CustomerAppRoutes.routes.addAll(AppRoutes.routes); initializeDateFormatting().then((_) => runApp( MultiProvider( diff --git a/lib/views/branches/branch_detail_view.dart b/lib/views/branches/branch_detail_view.dart index 52dfed2..717aa65 100644 --- a/lib/views/branches/branch_detail_view.dart +++ b/lib/views/branches/branch_detail_view.dart @@ -1,6 +1,7 @@ import 'dart:async'; import 'package:car_customer_app/views/branches/components/branch_reviews_widget.dart'; import 'package:car_customer_app/views/branches/components/items_list_sheet.dart'; +import 'package:mc_common_app/utils/utils.dart'; import 'package:mc_common_app/view_models/appointments_view_model.dart'; import 'package:easy_localization/easy_localization.dart'; import 'package:flutter/material.dart'; @@ -169,11 +170,15 @@ class _BranchDetailViewState extends State { ), ShowFillButton( maxHeight: 55, - // isDisabled: widget.branchDetailModel.branchServices!.length == 0, + isDisabled: widget.branchDetailModel.branchServices!.length == 0, title: LocaleKeys.bookAppointment.tr(), margin: EdgeInsets.all(12), maxWidth: double.infinity, onPressed: () { + if (widget.branchDetailModel.branchServices!.length == 0) { + Utils.showToast(LocaleKeys.noServicesAvailable.tr()); + return; + } navigateWithName(context, AppRoutes.bookAppointmenServicesView); context.read().updateSelectedBranch(widget.branchDetailModel); }, diff --git a/lib/views/branches/components/items_list_sheet.dart b/lib/views/branches/components/items_list_sheet.dart index d6ccf08..bf4629a 100644 --- a/lib/views/branches/components/items_list_sheet.dart +++ b/lib/views/branches/components/items_list_sheet.dart @@ -23,7 +23,7 @@ class ItemsListSheet extends StatefulWidget { } class _ItemsListSheetState extends State { - void initState() { + void initState() { super.initState(); scheduleMicrotask(() { context.read().getServiceItems(widget.serviceId); @@ -40,7 +40,7 @@ class _ItemsListSheetState extends State { return Center(child: CircularProgressIndicator()); } return appointmentsVM.serviceItemsFromApi.isEmpty - ? EmptyWidget(text: LocaleKeys.noItemstoShow.tr(), isWrappedColumn: false) + ? EmptyWidget(text: LocaleKeys.noItemsToShow.tr(), isWrappedColumn: false) : ListView.separated( itemCount: appointmentsVM.serviceItemsFromApi.length, itemBuilder: (BuildContext context, int index) { From 4370f36ab2b801b80470214f44fc94f069adbbc8 Mon Sep 17 00:00:00 2001 From: Faiz Hashmi Date: Thu, 31 Oct 2024 17:36:23 +0300 Subject: [PATCH 2/4] Issues Fixed --- lib/views/branches/branch_detail_view.dart | 48 +++++++++++-------- .../fragments/appointments_fragment.dart | 2 +- 2 files changed, 30 insertions(+), 20 deletions(-) diff --git a/lib/views/branches/branch_detail_view.dart b/lib/views/branches/branch_detail_view.dart index 717aa65..a3c89bb 100644 --- a/lib/views/branches/branch_detail_view.dart +++ b/lib/views/branches/branch_detail_view.dart @@ -107,25 +107,35 @@ class _BranchDetailViewState extends State { Row( mainAxisAlignment: MainAxisAlignment.spaceBetween, children: [ - Row( - mainAxisAlignment: MainAxisAlignment.center, - crossAxisAlignment: CrossAxisAlignment.center, - children: [ - LocaleKeys.openMapLocation.tr().toText( - fontSize: 12, - isBold: true, - color: MyColors.primaryColor, - isUnderLine: true, - ), - 4.width, - Image.asset( - MyAssets.icRightUpPng, - height: 6, - width: 6, - color: MyColors.primaryColor, - ), - ], - ).padding(EdgeInsets.symmetric(vertical: 6, horizontal: 2)), + if ((widget.branchDetailModel.latitude != null && widget.branchDetailModel.latitude!.isNotEmpty) && (widget.branchDetailModel.longitude != null && widget.branchDetailModel.longitude!.isNotEmpty)) ...[ + Row( + mainAxisAlignment: MainAxisAlignment.center, + crossAxisAlignment: CrossAxisAlignment.center, + children: [ + LocaleKeys.openMapLocation.tr().toText( + fontSize: 12, + isBold: true, + color: MyColors.primaryColor, + isUnderLine: true, + ), + 4.width, + Image.asset( + MyAssets.icRightUpPng, + height: 6, + width: 6, + color: MyColors.primaryColor, + ), + ], + ).padding(EdgeInsets.symmetric(vertical: 6, horizontal: 2)).onPress(() async { + double latitude, longitude = 0.0; + + latitude = double.parse(widget.branchDetailModel.latitude!); + longitude = double.parse(widget.branchDetailModel.longitude!); + await Utils.openLocationInMaps(latitude: latitude, longitude: longitude); + }), + ] else ...[ + SizedBox(), + ], Row( mainAxisAlignment: MainAxisAlignment.center, crossAxisAlignment: CrossAxisAlignment.center, diff --git a/lib/views/dashboard/fragments/appointments_fragment.dart b/lib/views/dashboard/fragments/appointments_fragment.dart index 8beea72..530a36b 100644 --- a/lib/views/dashboard/fragments/appointments_fragment.dart +++ b/lib/views/dashboard/fragments/appointments_fragment.dart @@ -59,7 +59,7 @@ class AppointmentsFragment extends StatelessWidget { Expanded( child: RefreshIndicator( onRefresh: () async { - appointmentsVM.getMyAppointments(); + appointmentsVM.getMyAppointmentsForCustomer(); }, child: appointmentsVM.state == ViewState.busy ? const Center(child: CircularProgressIndicator()) From e2a1ee7f5887d1ebdcf65e57803af9e1ac439b72 Mon Sep 17 00:00:00 2001 From: Faiz Hashmi Date: Sun, 3 Nov 2024 14:21:00 +0300 Subject: [PATCH 3/4] Issues Fixed --- lib/views/branches/favourite_list_view.dart | 77 +++++++++++---------- 1 file changed, 41 insertions(+), 36 deletions(-) diff --git a/lib/views/branches/favourite_list_view.dart b/lib/views/branches/favourite_list_view.dart index 3329ef9..7425eb0 100644 --- a/lib/views/branches/favourite_list_view.dart +++ b/lib/views/branches/favourite_list_view.dart @@ -41,43 +41,48 @@ class _FavoriteListViewState extends State { title: LocaleKeys.favoriteList.tr(), isRemoveBackButton: false, ), - body: SizedBox( - width: double.infinity, - height: double.infinity, - child: Column( - children: [ - Expanded( - child: Container( - width: double.infinity, - child: appointmentsVM.state == ViewState.busy - ? const Center(child: CircularProgressIndicator()) - : appointmentsVM.myFavProvidersList.isEmpty - ? Center( - child: (LocaleKeys.noProvidersInFav.tr()).toText( - fontSize: 16, - color: MyColors.lightTextColor, + body: RefreshIndicator( + onRefresh: () async { + await context.read().getMyFavoriteProviders(); + }, + child: SizedBox( + width: double.infinity, + height: double.infinity, + child: Column( + children: [ + Expanded( + child: Container( + width: double.infinity, + child: appointmentsVM.state == ViewState.busy + ? const Center(child: CircularProgressIndicator()) + : appointmentsVM.myFavProvidersList.isEmpty + ? Center( + child: (LocaleKeys.noProvidersInFav.tr()).toText( + fontSize: 16, + color: MyColors.lightTextColor, + ), + ) + : ListView.separated( + itemCount: appointmentsVM.myFavProvidersList.length, + itemBuilder: (context, index) { + ProviderProfileModel providerProfileModel = appointmentsVM.myFavProvidersList[index]; + return ProviderDetailCard( + onCardTapped: () => navigateWithName(context, AppRoutes.providerProfileView, arguments: providerProfileModel.providerID), + providerImageUrl: MyAssets.bnCar, + title: providerProfileModel.name ?? "", + description: providerProfileModel.companyDescription ?? "", + startedSince: DateHelper.formatAsMonthYear(DateHelper.parseStringToDate(DateHelper.formatDateT(providerProfileModel.memberSince ?? ""))), + branches: providerProfileModel.serviceProviderBranch ?? [], + totalBranches: (providerProfileModel.noOfBranches ?? 0).toString(), + ); + }, + separatorBuilder: (context, index) => 12.height, + padding: const EdgeInsets.all(12), ), - ) - : ListView.separated( - itemCount: appointmentsVM.myFavProvidersList.length, - itemBuilder: (context, index) { - ProviderProfileModel providerProfileModel = appointmentsVM.myFavProvidersList[index]; - return ProviderDetailCard( - onCardTapped: () => navigateWithName(context, AppRoutes.providerProfileView, arguments: providerProfileModel.providerID), - providerImageUrl: MyAssets.bnCar, - title: providerProfileModel.name ?? "", - description: providerProfileModel.companyDescription ?? "", - startedSince: DateHelper.formatAsMonthYear(DateHelper.parseStringToDate(DateHelper.formatDateT(providerProfileModel.memberSince ?? ""))), - branches: providerProfileModel.serviceProviderBranch ?? [], - totalBranches: (providerProfileModel.noOfBranches ?? 0).toString(), - ); - }, - separatorBuilder: (context, index) => 12.height, - padding: const EdgeInsets.all(12), - ), - ).paddingOnly(left: 10, right: 10), - ), - ], + ).paddingOnly(left: 10, right: 10), + ), + ], + ), ), ), ); From b6e1a6e95cf9eb981e0e6cf66bc7c5ff19d00fc7 Mon Sep 17 00:00:00 2001 From: Faiz Hashmi Date: Thu, 7 Nov 2024 13:13:20 +0300 Subject: [PATCH 4/4] Issues Fixed --- lib/config/customer_routes.dart | 5 ++--- .../branches/components/items_list_sheet.dart | 15 ++++++++++----- lib/views/branches/favourite_list_view.dart | 3 ++- lib/views/dashboard/dashboard_view.dart | 8 ++++++-- .../fragments/appointments_fragment.dart | 16 +++++++++++++++- lib/views/dashboard/widgets/bottom_nav_bar.dart | 2 +- 6 files changed, 36 insertions(+), 13 deletions(-) diff --git a/lib/config/customer_routes.dart b/lib/config/customer_routes.dart index 0b4cd9f..d97e565 100644 --- a/lib/config/customer_routes.dart +++ b/lib/config/customer_routes.dart @@ -1,11 +1,11 @@ import 'package:car_customer_app/views/branches/branch_detail_view.dart'; import 'package:car_customer_app/views/branches/favourite_list_view.dart'; import 'package:car_customer_app/views/branches/provider_profile_view.dart'; +import 'package:mc_common_app/utils/enums.dart'; import 'package:mc_common_app/views/appointments/appointment_detail_view.dart'; import 'package:mc_common_app/views/appointments/book_appointment_schedules_view.dart'; import 'package:mc_common_app/views/appointments/book_appointment_services_view.dart'; import 'package:mc_common_app/views/appointments/book_appointments_item_view.dart'; -import 'package:mc_common_app/views/appointments/pick_items_view.dart'; import 'package:mc_common_app/views/appointments/review_appointment_view.dart'; import 'package:car_customer_app/views/dashboard/dashboard_view.dart'; import 'package:flutter/cupertino.dart'; @@ -17,8 +17,7 @@ import 'package:mc_common_app/views/appointments/appointments_filter_view.dart'; class CustomerAppRoutes { static final Map routes = { - AppRoutes.dashboard: (context) => DashboardView(), - AppRoutes.bookProviderAppView: (context) => BookProviderAppView(), + AppRoutes.dashboard: (context) => DashboardView(dashboardRouteEnum: ModalRoute.of(context)!.settings.arguments as DashboardRouteEnum), AppRoutes.appointmentDetailView: (context) => AppointmentDetailView(appointmentListModel: ModalRoute.of(context)!.settings.arguments as AppointmentListModel), AppRoutes.bookAppointmenServicesView: (context) => BookAppointmentServicesView(), AppRoutes.bookAppointmenSchedulesView: (context) => BookAppointmentSchedulesView( diff --git a/lib/views/branches/components/items_list_sheet.dart b/lib/views/branches/components/items_list_sheet.dart index bf4629a..92cb113 100644 --- a/lib/views/branches/components/items_list_sheet.dart +++ b/lib/views/branches/components/items_list_sheet.dart @@ -2,6 +2,7 @@ import 'dart:async'; 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/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'; @@ -14,9 +15,9 @@ import 'package:provider/provider.dart'; import 'package:easy_localization/easy_localization.dart'; class ItemsListSheet extends StatefulWidget { - final int serviceId; + final int serviceProviderServiceId; - ItemsListSheet(this.serviceId); + ItemsListSheet(this.serviceProviderServiceId); @override State createState() => _ItemsListSheetState(); @@ -26,7 +27,7 @@ class _ItemsListSheetState extends State { void initState() { super.initState(); scheduleMicrotask(() { - context.read().getServiceItems(widget.serviceId); + context.read().getServiceItems(widget.serviceProviderServiceId); }); } @@ -57,7 +58,11 @@ class _ItemsListSheetState extends State { mainAxisAlignment: MainAxisAlignment.start, children: [ serviceItemModel.name.toString().toText(fontSize: 16, isBold: true), - 4.height, + 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.availableforAppointment.tr() + ":", (serviceItemModel.isAllowAppointment ?? false) ? "Yes" : "No", valueColor: Colors.green), showItem(LocaleKeys.allowingWorkshopService.tr() + ":", (serviceItemModel.isAppointmentCompanyLoc ?? false) ? "Yes" : "No", valueColor: Colors.green), showItem(LocaleKeys.allowingHomeService.tr() + ":", (serviceItemModel.isAppointmentCustomerLoc ?? false) ? "Yes" : "No", valueColor: Colors.green), @@ -104,7 +109,7 @@ class _ItemsListSheetState extends State { crossAxisAlignment: CrossAxisAlignment.start, mainAxisAlignment: MainAxisAlignment.start, children: [ - item.toText(fontSize: 12, color: MyColors.lightTextColor, isBold: true), + item.toText(fontSize: 12, color: MyColors.lightTextColor), 4.width, value.toText(fontSize: 12, color: valueColor, isBold: true), ], diff --git a/lib/views/branches/favourite_list_view.dart b/lib/views/branches/favourite_list_view.dart index 7425eb0..a690d3d 100644 --- a/lib/views/branches/favourite_list_view.dart +++ b/lib/views/branches/favourite_list_view.dart @@ -67,11 +67,12 @@ class _FavoriteListViewState extends State { itemBuilder: (context, index) { ProviderProfileModel providerProfileModel = appointmentsVM.myFavProvidersList[index]; return ProviderDetailCard( + isFromFavoriteList: true, onCardTapped: () => navigateWithName(context, AppRoutes.providerProfileView, arguments: providerProfileModel.providerID), providerImageUrl: MyAssets.bnCar, title: providerProfileModel.name ?? "", description: providerProfileModel.companyDescription ?? "", - startedSince: DateHelper.formatAsMonthYear(DateHelper.parseStringToDate(DateHelper.formatDateT(providerProfileModel.memberSince ?? ""))), + startedSince: DateHelper.formatAsDayMonthYear(DateHelper.parseStringToDate(DateHelper.formatDateT(providerProfileModel.memberSince ?? ""))), branches: providerProfileModel.serviceProviderBranch ?? [], totalBranches: (providerProfileModel.noOfBranches ?? 0).toString(), ); diff --git a/lib/views/dashboard/dashboard_view.dart b/lib/views/dashboard/dashboard_view.dart index b81942f..5a51fa3 100644 --- a/lib/views/dashboard/dashboard_view.dart +++ b/lib/views/dashboard/dashboard_view.dart @@ -1,8 +1,10 @@ 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/requests_fragment.dart'; import 'package:provider/provider.dart'; @@ -10,7 +12,9 @@ import 'fragments/branches_fragment.dart'; import 'package:mc_common_app/views/common_fragments/ads_fragment.dart'; class DashboardView extends StatefulWidget { - const DashboardView({Key? key}) : super(key: key); + final DashboardRouteEnum dashboardRouteEnum; + + const DashboardView({Key? key, required this.dashboardRouteEnum}) : super(key: key); @override State createState() => _DashboardViewState(); @@ -24,7 +28,7 @@ class _DashboardViewState extends State { void initState() { super.initState(); dashboardVM = Provider.of(context, listen: false); - scheduleMicrotask(() => dashboardVM.onRefresh(context)); + scheduleMicrotask(() => dashboardVM.onRefresh(context, dashboardRouteEnum: widget.dashboardRouteEnum)); } @override diff --git a/lib/views/dashboard/fragments/appointments_fragment.dart b/lib/views/dashboard/fragments/appointments_fragment.dart index 530a36b..df8621f 100644 --- a/lib/views/dashboard/fragments/appointments_fragment.dart +++ b/lib/views/dashboard/fragments/appointments_fragment.dart @@ -59,7 +59,7 @@ class AppointmentsFragment extends StatelessWidget { Expanded( child: RefreshIndicator( onRefresh: () async { - appointmentsVM.getMyAppointmentsForCustomer(); + appointmentsVM.getMyAppointmentsForCustomer(isNeedToRebuild: true); }, child: appointmentsVM.state == ViewState.busy ? const Center(child: CircularProgressIndicator()) @@ -68,6 +68,20 @@ class AppointmentsFragment extends StatelessWidget { mainAxisAlignment: MainAxisAlignment.center, children: [ LocaleKeys.noAppointmentstoShow.tr().toText(fontSize: 16, color: MyColors.lightTextColor), + if (appointmentsVM.appointmentFiltersCounter > 0) ...[ + 8.height, + InkWell( + onTap: () async { + appointmentsVM.clearAppointmentFilters(); + await appointmentsVM.getMyAppointmentsForCustomer(isNeedToRebuild: true); + }, + child: LocaleKeys.clearFilters.tr().toText( + fontSize: 14, + isBold: true, + color: MyColors.darkPrimaryColor, + ), + ), + ], ], ) : ListView.separated( diff --git a/lib/views/dashboard/widgets/bottom_nav_bar.dart b/lib/views/dashboard/widgets/bottom_nav_bar.dart index 802a004..e28edab 100644 --- a/lib/views/dashboard/widgets/bottom_nav_bar.dart +++ b/lib/views/dashboard/widgets/bottom_nav_bar.dart @@ -32,7 +32,7 @@ class CustomBottomNavbar extends StatelessWidget { color: MyColors.lightIconColor, ).paddingAll(5), activeIcon: SvgPicture.asset(MyAssets.homeIcon, color: MyColors.darkIconColor).paddingAll(5), - label: LocaleKeys.home.tr(), + label: LocaleKeys.explore.tr(), ), BottomNavigationBarItem( icon: SvgPicture.asset(MyAssets.announcementIcon).paddingAll(5),