diff --git a/ios/Runner/AppDelegate.swift b/ios/Runner/AppDelegate.swift index fa75811..42ac207 100644 --- a/ios/Runner/AppDelegate.swift +++ b/ios/Runner/AppDelegate.swift @@ -5,7 +5,7 @@ import Firebase import flutter_local_notifications -@UIApplicationMain +@main @objc class AppDelegate: FlutterAppDelegate { override func application( _ application: UIApplication, diff --git a/lib/view_models/dashboard_view_model.dart b/lib/view_models/dashboard_view_model.dart index 7872763..ccccfa7 100644 --- a/lib/view_models/dashboard_view_model.dart +++ b/lib/view_models/dashboard_view_model.dart @@ -120,6 +120,7 @@ class DashboardVM extends BaseVM { void performCheckOnBranches(BuildContext context) async { if (AppState().getproviderSubscription.isNotEmpty && AppState().getproviderSubscription.first.branchesRemaining! > 0) { + logger.d(AppState().getproviderSubscription.first.toJson()); await navigateWithName(context, ProviderAppRoutes.defineBranch); } else { Utils.showToast("Upgrade your subscription to add more Branches."); @@ -129,6 +130,7 @@ class DashboardVM extends BaseVM { void performCheckOnAds(BuildContext context) async { //adsRemaining if (AppState().getproviderSubscription.isNotEmpty && AppState().getproviderSubscription.first.adsRemaining! > 0) { + logger.d(AppState().getproviderSubscription.first.toJson()); await navigateWithName(context, ProviderAppRoutes.defineBranch); } else { Utils.showToast("Upgrade your subscription to add more Ads."); @@ -137,6 +139,7 @@ class DashboardVM extends BaseVM { void performCheckOnUsers(BuildContext context, Function() callBack) async { if (AppState().getproviderSubscription.isNotEmpty && AppState().getproviderSubscription.first.subUsersRemaining! > 0) { + logger.d(AppState().getproviderSubscription.first.toJson()); showMyBottomSheet(context, isDismissible: false, child: const AddPhoneNumWidget(), callBackFunc: callBack); } else { Utils.showToast("Upgrade your subscription to add more Sub Users."); diff --git a/lib/view_models/items_view_model.dart b/lib/view_models/items_view_model.dart index 0215567..f2c2c42 100644 --- a/lib/view_models/items_view_model.dart +++ b/lib/view_models/items_view_model.dart @@ -8,6 +8,7 @@ import 'package:mc_common_app/models/services_models/item_model.dart'; import 'package:mc_common_app/services/common_services.dart'; import 'package:mc_common_app/utils/enums.dart'; import 'package:mc_common_app/utils/utils.dart'; +import 'package:mc_common_app/view_models/ad_view_model.dart'; import 'package:mc_common_app/view_models/base_view_model.dart'; import 'package:file_picker/file_picker.dart'; import 'package:easy_localization/easy_localization.dart'; @@ -24,7 +25,7 @@ class ItemsVM extends BaseVM { ItemModel? serviceItems; Future selectFile(BuildContext context) async { - File? file = await commonServices.pickFile(context,fileType: FileType.image); + File? file = await commonServices.pickFile(context, fileType: FileType.image); if (file != null) { int sizeInBytes = file.lengthSync(); @@ -45,8 +46,7 @@ class ItemsVM extends BaseVM { return response; } - Future getServiceItems(int serviceId, - {List? list}) async { + Future getServiceItems(int serviceId, {List? list}) async { serviceItems = null; setOnlyState(ViewState.busy); serviceItems = await itemsRepo.getServiceItems(serviceId); @@ -72,4 +72,10 @@ class ItemsVM extends BaseVM { GenericRespModel response = await itemsRepo.updateServiceItem(map); return response; } + + Future pickSingleFile(BuildContext context) async { + File? file = await commonServices.pickFile(context, fileType: FileType.custom, allowedExtensions: ['jpg', 'png', 'jpeg']); + if (file == null) return null; + return file; + } } diff --git a/lib/views/appoinments/appoinment_detail_list_page.dart b/lib/views/appoinments/appoinment_detail_list_page.dart index 9550c36..90e831c 100644 --- a/lib/views/appoinments/appoinment_detail_list_page.dart +++ b/lib/views/appoinments/appoinment_detail_list_page.dart @@ -11,7 +11,6 @@ import 'package:mc_common_app/widgets/common_widgets/app_bar.dart'; import 'package:provider/provider.dart'; import 'package:easy_localization/easy_localization.dart'; - class AppointmentDetailListPage extends StatelessWidget { const AppointmentDetailListPage({Key? key}) : super(key: key); @@ -19,7 +18,7 @@ class AppointmentDetailListPage extends StatelessWidget { Widget build(BuildContext context) { return Scaffold( appBar: CustomAppBar( - title:LocaleKeys.appointment_details.tr(), + title: LocaleKeys.appointment_details.tr(), ), body: SizedBox( width: double.infinity, @@ -55,14 +54,16 @@ class AppointmentDetailListPage extends StatelessWidget { } }), ), - ShowFillButton( - title: LocaleKeys.mergeAppointments.tr(), - maxWidth: double.infinity, - margin: const EdgeInsets.all(21), - onPressed: () { - navigateWithName(context, ProviderAppRoutes.mergeAppointments); - }, - ), + context.read().isShowMergeButton() + ? ShowFillButton( + title: LocaleKeys.mergeAppointments.tr(), + maxWidth: double.infinity, + margin: const EdgeInsets.all(21), + onPressed: () { + navigateWithName(context, ProviderAppRoutes.mergeAppointments); + }, + ) + : SizedBox(), ], )), ); diff --git a/lib/views/appoinments/update_appointment_page.dart b/lib/views/appoinments/update_appointment_page.dart index 2e482fb..375f400 100644 --- a/lib/views/appoinments/update_appointment_page.dart +++ b/lib/views/appoinments/update_appointment_page.dart @@ -35,8 +35,10 @@ class UpdateAppointmentPage extends StatelessWidget { child: Consumer(builder: (BuildContext context, AppointmentsVM appointmentsVM, Widget? child) { appointmentListModel = appointmentsVM.myFilteredAppointments2[appointmentsVM.selectedAppointmentIndex].customerAppointmentList![appointmentsVM.selectedAppointmentSubIndex]; if (appointmentsVM.state == ViewState.busy) { + return const Center(child: CircularProgressIndicator()); } else { + print(appointmentListModel.appointmentPaymentStatusEnum); return Column( children: [ Expanded( @@ -98,7 +100,10 @@ class UpdateAppointmentPage extends StatelessWidget { if ((appointmentListModel.appointmentStatusEnum == AppointmentStatusEnum.arrived || appointmentListModel.appointmentStatusEnum == AppointmentStatusEnum.workStarted) && appointmentListModel.appointmentPaymentStatusEnum == AppointmentPaymentStatusEnum.payNow) - LocaleKeys.waitingPaymentfromtheCustomer.tr().toText().paddingAll(21), + + buildStatusContainer(text: LocaleKeys.waitingPaymentfromtheCustomer.tr()).paddingAll(10), + + // LocaleKeys.waitingPaymentfromtheCustomer.tr().toText().paddingAll(21), if (appointmentListModel.appointmentStatusEnum == AppointmentStatusEnum.arrived && (appointmentListModel.appointmentPaymentStatusEnum == AppointmentPaymentStatusEnum.paid || appointmentListModel.appointmentPaymentStatusEnum == AppointmentPaymentStatusEnum.payLater)) @@ -229,6 +234,22 @@ class UpdateAppointmentPage extends StatelessWidget { ); } + Widget buildStatusContainer({required String text}) { + return Center( + child: text.toString().toText( + color: MyColors.adPendingStatusColor, + fontSize: 14, + // isItalic: true, + ), + ).toContainer( + marginAll: 10, + paddingAll: 10, + borderRadius: 8, + width: double.infinity, + backgroundColor: MyColors.adPendingStatusColor.withOpacity(0.16), + ); + } + Widget showCompleteButton(BuildContext context, AppointmentsVM appointmentsVM) { return ShowFillButton( title: LocaleKeys.complete.tr(), diff --git a/lib/views/dashboard/fragments/branch_appointment_fragment.dart b/lib/views/dashboard/fragments/branch_appointment_fragment.dart index 805f7cb..27dd0d4 100644 --- a/lib/views/dashboard/fragments/branch_appointment_fragment.dart +++ b/lib/views/dashboard/fragments/branch_appointment_fragment.dart @@ -50,7 +50,7 @@ class BranchAppointmentFragment extends StatelessWidget { return RefreshIndicator( onRefresh: () async => serviceVM.getBranchAndServices(), child: branches.isEmpty - ? Center(child: Text(LocaleKeys.noBranchFound.tr())) + ? Center(child: LocaleKeys.noBranchFound.tr().toText(fontSize: 16, color: MyColors.lightTextColor, fontWeight: MyFonts.Medium),) : ListView.separated( itemBuilder: (context, index) { return Row( diff --git a/lib/views/dashboard/fragments/home_fragment.dart b/lib/views/dashboard/fragments/home_fragment.dart index eeb2637..481606e 100644 --- a/lib/views/dashboard/fragments/home_fragment.dart +++ b/lib/views/dashboard/fragments/home_fragment.dart @@ -2,14 +2,18 @@ import 'package:car_provider_app/config/provider_routes.dart'; import 'package:car_provider_app/view_models/dashboard_view_model.dart'; import 'package:car_provider_app/views/dashboard/widget/my_service_provider.dart'; import 'package:flutter/material.dart'; +import 'package:mc_common_app/classes/app_state.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/generated/locale_keys.g.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/view_models/ad_view_model.dart'; +import 'package:mc_common_app/view_models/appointments_view_model.dart'; import 'package:mc_common_app/views/advertisement/components/ads_list_widget.dart'; import 'package:mc_common_app/views/appointments/widgets/common_appointment_slider_widget.dart'; import 'package:mc_common_app/widgets/common_widgets/app_bar.dart'; @@ -70,11 +74,22 @@ class HomeFragment extends StatelessWidget { }, ).horPaddingMain(), // const AppointmentSliderWidget().horPaddingMain(), - CommonAppointmentSliderWidget( - onAppointmentClick: (AppointmentListModel value) { - navigateWithName(context, ProviderAppRoutes.appointmentDetailList, arguments: value); - }, - ).toWhiteContainer(width: double.infinity, backgroundColor: Colors.transparent).margin(left: 21, right: 21), + + //TODO TESTING PENDING + if (AppState().currentAppType == AppType.provider && context.read().myUpComingAppointments.isEmpty) ...[ + LocaleKeys.noUpcomingAppointments.tr().toText(fontSize: 16, color: MyColors.lightTextColor, fontWeight: MyFonts.Medium).paddingAll(21), + ] else ...[ + CommonAppointmentSliderWidget( + onAppointmentClick: (AppointmentListModel value) { + navigateWithName(context, ProviderAppRoutes.appointmentDetailList, arguments: value); + }, + ) + .toWhiteContainer( + width: double.infinity, + backgroundColor: Colors.transparent, + ) + .margin(left: 21, right: 21), + ], 24.height, ViewAllWidget( title: LocaleKeys.myBranches.tr(), diff --git a/lib/views/dashboard/widget/general_appointment_widget.dart b/lib/views/dashboard/widget/general_appointment_widget.dart index ee93fa1..dcfcff7 100644 --- a/lib/views/dashboard/widget/general_appointment_widget.dart +++ b/lib/views/dashboard/widget/general_appointment_widget.dart @@ -173,17 +173,17 @@ class GeneralAppointmentWidget extends StatelessWidget { ), ], ), - Row( - children: [ - "Location: ".toText( - color: MyColors.lightTextColor, - ), - 2.width, - appointmentListModel.appointmentType.toString().toText( - fontSize: 12, - ), - ], - ), + // Row( + // children: [ + // "Location: ".toText( + // color: MyColors.lightTextColor, + // ), + // 2.width, + // appointmentListModel.appointmentType.toString().toText( + // fontSize: 12, + // ), + // ], + // ), ], ), ), diff --git a/lib/views/dashboard/widget/my_service_provider.dart b/lib/views/dashboard/widget/my_service_provider.dart index ff6ba25..0e17630 100644 --- a/lib/views/dashboard/widget/my_service_provider.dart +++ b/lib/views/dashboard/widget/my_service_provider.dart @@ -3,6 +3,7 @@ import 'package:car_provider_app/generated/locale_keys.g.dart'; import 'package:flutter/cupertino.dart'; import 'package:mc_common_app/generated/locale_keys.g.dart'; import 'package:mc_common_app/models/provider_branches_models/branch_detail_model.dart'; +import 'package:mc_common_app/theme/colors.dart'; import 'package:mc_common_app/view_models/service_view_model.dart'; import 'package:flutter/material.dart'; import 'package:mc_common_app/classes/consts.dart'; @@ -28,9 +29,9 @@ class ServiceProviderWidget extends StatelessWidget { return const Center(child: CircularProgressIndicator()); } else { return serviceVM.branches == null || serviceVM.branches!.data == null - ? Center(child: Text(LocaleKeys.noBranchFound.tr())) + ? Center(child: Text(LocaleKeys.noBranchFound.tr(), fontSize: 16, color: MyColors.lightTextColor, fontWeight: MyFonts.Medium)) : serviceVM.homePageBranches.isEmpty - ? Center(child: Text(LocaleKeys.no_branch.tr())) + ? Center(child: Text(LocaleKeys.no_branch.tr(), fontSize: 16, color: MyColors.lightTextColor, fontWeight: MyFonts.Medium)) : ListView.builder( itemCount: serviceVM.homePageBranches.length, scrollDirection: Axis.horizontal, diff --git a/lib/views/settings/branch/branch_detail_page.dart b/lib/views/settings/branch/branch_detail_page.dart index 045be8d..879c9bb 100644 --- a/lib/views/settings/branch/branch_detail_page.dart +++ b/lib/views/settings/branch/branch_detail_page.dart @@ -28,37 +28,17 @@ class BranchDetailPage extends StatelessWidget { BranchDetailPage(this.branchData, {super.key}); - List categories = []; getBranchUsers(BuildContext context) { scheduleMicrotask(() { context.read().getAllProviderDealers( {"ServiceProviderBranchID": branchData.id.toString(), "ServiceProviderID": AppState().getUser.data?.userInfo?.providerId.toString() ?? ""}, ); + context.read().filterUserBranchCategories(); }); } - filterBranch() { - for (var element in branchData.branchServices!) { - categories.add( - CategoryData( - id: element.categoryId, - categoryName: element.categoryName, - categoryNameN: element.categoryName, - ), - ); - } - categories = categories.toSet().toList(); - for (var payment in categories) { - for (var element in branchData.branchServices!) { - if (payment.id == element.categoryId) { - payment.services ??= []; - payment.services!.add(element); - } - } - } - branchData.categories = categories; - } + bool validation(BuildContext context) { bool isValid = false; @@ -167,7 +147,7 @@ class BranchDetailPage extends StatelessWidget { return actionWidget.paddingAll(21); } - Widget buildServiceTileWidget(int pIndex) { + Widget buildServiceTileWidget(int pIndex, ServiceVM vmodel) { return Row( crossAxisAlignment: CrossAxisAlignment.start, mainAxisSize: MainAxisSize.min, @@ -189,7 +169,7 @@ class BranchDetailPage extends StatelessWidget { Row( mainAxisAlignment: MainAxisAlignment.spaceBetween, children: [ - categories[pIndex].categoryName.toString().toText(fontSize: 16), + vmodel.categories[pIndex].categoryName.toString().toText(fontSize: 16), ], ), 8.height, @@ -201,13 +181,16 @@ class BranchDetailPage extends StatelessWidget { child: ListView.builder( itemBuilder: (context, index) { return Container( - child: (EasyLocalization.of(context)?.currentLocale?.countryCode == "SA" ? categories[pIndex].services![index].serviceDescriptionN.toString() : categories[pIndex].services![index].serviceDescription.toString()).toText( + child: (EasyLocalization.of(context)?.currentLocale?.countryCode == "SA" + ? vmodel.categories[pIndex].services![index].serviceDescriptionN.toString() + : vmodel.categories[pIndex].services![index].serviceDescription.toString()) + .toText( fontSize: 12, color: MyColors.lightTextColor, ), ); }, - itemCount: categories[pIndex].services?.length, + itemCount: vmodel.categories[pIndex].services?.length, physics: const NeverScrollableScrollPhysics(), shrinkWrap: true, padding: EdgeInsets.zero, @@ -223,7 +206,7 @@ class BranchDetailPage extends StatelessWidget { @override Widget build(BuildContext context) { - filterBranch(); + getBranchUsers(context); return Scaffold( appBar: CustomAppBar(title: LocaleKeys.branchDetail.tr()), body: Consumer(builder: (context, model, _) { @@ -343,13 +326,13 @@ class BranchDetailPage extends StatelessWidget { }), ListView.separated( itemBuilder: (context, pIndex) { - return buildServiceTileWidget(pIndex).onPress(() { - categories[pIndex].branchId = branchData.id.toString(); - categories[pIndex].branchName = branchData.branchName.toString(); - navigateWithName(context, ProviderAppRoutes.servicesList, arguments: categories[pIndex]); + return buildServiceTileWidget(pIndex, model).onPress(() { + model.categories[pIndex].branchId = branchData.id.toString(); + model.categories[pIndex].branchName = branchData.branchName.toString(); + navigateWithName(context, ProviderAppRoutes.servicesList, arguments: model.categories[pIndex]); }); }, - itemCount: categories.length, + itemCount: model.categories.length, physics: const NeverScrollableScrollPhysics(), shrinkWrap: true, padding: const EdgeInsets.all(20), diff --git a/lib/views/settings/branch/branch_list_page.dart b/lib/views/settings/branch/branch_list_page.dart index fc762db..e0593c6 100644 --- a/lib/views/settings/branch/branch_list_page.dart +++ b/lib/views/settings/branch/branch_list_page.dart @@ -1,4 +1,5 @@ import 'package:car_provider_app/config/provider_routes.dart'; +import 'package:car_provider_app/view_models/dashboard_view_model.dart'; import 'package:flutter/gestures.dart'; import 'package:mc_common_app/classes/consts.dart'; import 'package:mc_common_app/generated/locale_keys.g.dart'; @@ -104,7 +105,7 @@ class BranchListPage extends StatelessWidget { return RefreshIndicator( onRefresh: () async => await context.read().getBranchAndServices(), child: branches.isEmpty - ? Center(child: LocaleKeys.no_branch.tr().toText(fontSize: 16, color: MyColors.lightTextColor)) + ? Center(child: LocaleKeys.no_branch.tr().toText(fontSize: 16, color: MyColors.lightTextColor, fontWeight: MyFonts.Medium)) : ListView.separated( itemBuilder: (context, index) { BranchDetailModel branchModel = branches[index]; @@ -204,7 +205,7 @@ class BranchListPage extends StatelessWidget { color: Colors.white, ), onPressed: () { - navigateWithName(context, ProviderAppRoutes.defineBranch); + context.read().checkUserSubscription(SubscriptionActionTypeEnum.branches, context, callback: () { }); }, ), ); diff --git a/lib/views/settings/branch/define_branch_view.dart b/lib/views/settings/branch/define_branch_view.dart index 66b3c3c..3b68e2b 100644 --- a/lib/views/settings/branch/define_branch_view.dart +++ b/lib/views/settings/branch/define_branch_view.dart @@ -1,4 +1,5 @@ import 'dart:async'; +import 'package:car_provider_app/view_models/dashboard_view_model.dart'; import 'package:mc_common_app/classes/consts.dart'; import 'package:mc_common_app/extensions/string_extensions.dart'; import 'package:mc_common_app/generated/locale_keys.g.dart'; @@ -10,7 +11,7 @@ import 'package:mc_common_app/views/location_views/pick_location_page.dart'; import 'package:mc_common_app/extensions/int_extensions.dart'; import 'package:mc_common_app/models/provider_branches_models/branch_detail_model.dart'; import 'package:mc_common_app/theme/colors.dart'; -import 'package:provider/provider.dart'; +import 'package:provider/provider.dart'; import 'package:mc_common_app/utils/enums.dart'; import 'package:mc_common_app/utils/navigator.dart'; import 'package:mc_common_app/views/advertisement/ad_creation_steps/ad_creation_steps_containers.dart'; diff --git a/lib/views/settings/schedule/add_schedules_page.dart b/lib/views/settings/schedule/add_schedules_page.dart index 215aece..9faa2ee 100644 --- a/lib/views/settings/schedule/add_schedules_page.dart +++ b/lib/views/settings/schedule/add_schedules_page.dart @@ -47,8 +47,11 @@ class _AddSchedulesPageState extends State { // mModel.selectedServicesItems.clear(); scheduleData.scheduleServices?.forEach((element) { - mModel.selectedServicesItems.add(PickerItem(id: element.providerServiceId ?? 0, title: element.serviceDescription ?? "")); + print("Services Elements"); + print(element); + mModel.selectedServicesItems.add(PickerItem(id: element.serviceProviderServiceId ?? 0, title: element.serviceDescription ?? "")); }); + logger.d(mModel.selectedServicesItems.first.id); mModel.selectedDaysItems.clear(); scheduleData.weeklyOffDays?.forEach((element) { for (var daysElement in initDaysList) { @@ -330,6 +333,7 @@ class _AddSchedulesPageState extends State { "serviceGroupDescription": "string", }; + GenericRespModel servicesResponse = await model.addServicesInSchedule(map1); Utils.hideLoading(context); if (servicesResponse.messageStatus == 1) { diff --git a/lib/views/settings/services/create_item_page.dart b/lib/views/settings/services/create_item_page.dart index c16c27e..c483101 100644 --- a/lib/views/settings/services/create_item_page.dart +++ b/lib/views/settings/services/create_item_page.dart @@ -1,8 +1,11 @@ import 'dart:convert'; +import 'dart:io'; import 'package:car_provider_app/view_models/items_view_model.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/generated/locale_keys.g.dart'; import 'package:mc_common_app/models/general_models/generic_resp_model.dart'; import 'package:mc_common_app/models/services_models/item_model.dart'; import 'package:mc_common_app/theme/colors.dart'; @@ -10,6 +13,9 @@ import 'package:mc_common_app/utils/app_permission_handler.dart'; import 'package:mc_common_app/utils/date_helper.dart'; import 'package:mc_common_app/utils/navigator.dart'; import 'package:mc_common_app/utils/utils.dart'; +import 'package:mc_common_app/view_models/ad_view_model.dart'; +import 'package:mc_common_app/views/advertisement/ad_creation_steps/ad_creation_steps_containers.dart'; +import 'package:mc_common_app/views/advertisement/components/picked_images_container_widget.dart'; import 'package:mc_common_app/widgets/button/show_fill_button.dart'; import 'package:mc_common_app/widgets/checkbox_with_title_desc.dart'; import 'package:mc_common_app/widgets/common_widgets/app_bar.dart'; @@ -17,6 +23,7 @@ import 'package:mc_common_app/widgets/extensions/extensions_widget.dart'; import 'package:mc_common_app/widgets/txt_field.dart'; import 'package:permission_handler/permission_handler.dart'; import 'package:provider/provider.dart'; +import 'package:easy_localization/easy_localization.dart'; class CreateItemPage extends StatefulWidget { const CreateItemPage({Key? key}) : super(key: key); @@ -31,6 +38,7 @@ class _CreateItemPageState extends State { bool isWorkshopAppointmentAvailable = false; bool isHomeAppointmentAvailable = false; bool isDefaultValudDone = false; + File? file; ItemsVM? model; ItemData? itemData; @@ -113,59 +121,28 @@ class _CreateItemPageState extends State { }, ), 12.height, - if (itemImage != null && itemImage!.isNotEmpty) - Column( - children: [ - Image.memory( - base64Decode(itemImage ?? ""), - ).toContainer( - isEnabledBorder: true, - paddingAll: 12, - ), - 12.height, - ], - ), - InkWell( - onTap: () async { - bool isPermissionsAvailable = await requestPermissionGranted(context, Permission.storage); - if (isPermissionsAvailable && model != null) { - itemImage = await model!.selectFile(context) ?? ""; + if (file != null) ...[ + PickedFilesContainer( + pickedFiles: pickedImages(), + onCrossPressedPrimary: onCrossPress, + isPdf: false, + isReview: false, + isFromNetwork: false, + onAddFilePressed: () async { + file = await model!.pickSingleFile(context); setState(() {}); - } - }, - child: Container( - width: double.infinity, - height: 45, - decoration: BoxDecoration( - color: Colors.transparent, - border: Border.all(color: MyColors.greyACColor, width: 2), - borderRadius: const BorderRadius.all(Radius.circular(0)), - ), - child: Row( - mainAxisAlignment: MainAxisAlignment.center, - crossAxisAlignment: CrossAxisAlignment.center, - children: [ - const Icon( - Icons.attach_file, - size: 18, - color: MyColors.darkPrimaryColor, - ), - 8.width, - const Text( - "Attach Item Image", - style: TextStyle( - color: MyColors.darkPrimaryColor, - ), - ), - const Icon( - Icons.attach_file, - size: 18, - color: Colors.transparent, - ), - ], - ), + }, ), - ), + ] else ...[ + 10.height, + DottedRectContainer( + onTap: () async { + file = await model!.pickSingleFile(context); + setState(() {}); + }, + text: LocaleKeys.attachImage.tr(), + icon: MyAssets.attachmentIcon.buildSvg()) + ], 20.height, CheckBoxWithTitleDescription( isSelected: isAppointmentAvailable, @@ -212,12 +189,13 @@ class _CreateItemPageState extends State { maxWidth: double.infinity, onPressed: () async { if (validation()) { + var attachedFile = await Utils.convertFileToBase64(file!); if (!(itemData?.isUpdateOrSelected ?? false)) { Map map = { "name": name, "price": price, "description": description, - "itemImage": itemImage ?? "", + "itemImage": attachedFile ?? "", "companyID": 1, "manufactureDate": year, "serviceProviderServiceID": itemData!.serviceProviderServiceId, @@ -240,7 +218,7 @@ class _CreateItemPageState extends State { "name": name, "price": price, "description": description, - "itemImage": itemImage ?? "", + "itemImage": attachedFile ?? "", "companyID": 1, "manufactureDate": year, "serviceProviderServiceID": itemData!.serviceProviderServiceId, @@ -284,4 +262,17 @@ class _CreateItemPageState extends State { } return valid; } + + void onCrossPress(String item) { + file = null; + setState(() {}); + } + + List pickedImages() { + List pickedImage = []; + if (file != null) { + pickedImage.add(ImageModel(isFromNetwork: false, id: 1, filePath: file!.path)); + } + return pickedImage; + } } diff --git a/lib/views/settings/services/create_services_page3.dart b/lib/views/settings/services/create_services_page3.dart index c8ad85f..17235fe 100644 --- a/lib/views/settings/services/create_services_page3.dart +++ b/lib/views/settings/services/create_services_page3.dart @@ -1,4 +1,5 @@ import 'dart:async'; +import 'package:mc_common_app/classes/app_state.dart'; import 'package:mc_common_app/generated/locale_keys.g.dart'; import 'package:mc_common_app/models/general_models/generic_resp_model.dart'; import 'package:mc_common_app/utils/navigator.dart'; @@ -267,7 +268,7 @@ class _CreateServicesPage3State extends State { // print(map); Utils.showLoading(context); GenericRespModel mResponse = await model.createService(map); - model.getBranchAndServices(); + await model.getBranchAndServices(); Utils.hideLoading(context); Utils.showToast(mResponse.message ?? ""); pop(context); @@ -282,6 +283,7 @@ class _CreateServicesPage3State extends State { Utils.showLoading(context); GenericRespModel mResponse = await model.updateServices(map); model.getBranchAndServices(); + model.filterUserBranchCategories(); Utils.hideLoading(context); Utils.showToast(mResponse.message ?? ""); pop(context); diff --git a/lib/views/settings/services/duplication/matched_services_page.dart b/lib/views/settings/services/duplication/matched_services_page.dart index 2b56064..7f265a8 100644 --- a/lib/views/settings/services/duplication/matched_services_page.dart +++ b/lib/views/settings/services/duplication/matched_services_page.dart @@ -98,7 +98,7 @@ class _MatchedServicesPageState extends State { if (model.matchedServices == null) { return const Center(child: CircularProgressIndicator()); } else if (model.matchedServices!.isEmpty) { - return const EmptyWidget(); + return const EmptyWidget(text: "No Services found", isWrapedColumn: false); } return ListView.separated( itemBuilder: (context, index) { @@ -123,7 +123,8 @@ class _MatchedServicesPageState extends State { crossAxisAlignment: CrossAxisAlignment.start, children: [ model.matchedServices![index].serviceDescription.toString().toText(fontSize: 16, isBold: true), - "${model.matchedServices![index].serviceItems!.where((c) => c.isUpdateOrSelected == true).length} items selected out of ${model.matchedServices![index].serviceItems!.length}".toText(color: MyColors.lightTextColor) + "${model.matchedServices![index].serviceItems!.where((c) => c.isUpdateOrSelected == true).length} items selected out of ${model.matchedServices![index].serviceItems!.length}" + .toText(color: MyColors.lightTextColor) ], ), ), diff --git a/lib/views/settings/services/items_list_page.dart b/lib/views/settings/services/items_list_page.dart index f81fe76..8fc7592 100644 --- a/lib/views/settings/services/items_list_page.dart +++ b/lib/views/settings/services/items_list_page.dart @@ -41,7 +41,7 @@ class ItemsListPage extends StatelessWidget { return model.state == ViewState.busy ? const Center(child: CircularProgressIndicator()) : model.serviceItems!.data!.isEmpty - ? const EmptyWidget() + ? const EmptyWidget(text: "No Service Items found", isWrapedColumn: false) : ListView.separated( itemBuilder: (BuildContext context, int index) { return SizedBox( diff --git a/pubspec.yaml b/pubspec.yaml index ee58bea..724eed1 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -40,8 +40,8 @@ dependencies: # path: C:/Users/mirza.shafique/AndroidStudioProjects/mc_common_app mc_common_app: - path: /Volumes/Data/Projects/Flutter/car_common_app -# path: /Users/amir/StudioProjects/car_common_app +# path: /Volumes/Data/Projects/Flutter/car_common_app + path: /Users/amir/StudioProjects/car_common_app