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 6a8932c..77a785c 100644 --- a/lib/view_models/dashboard_view_model.dart +++ b/lib/view_models/dashboard_view_model.dart @@ -122,6 +122,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."); @@ -131,6 +132,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."); @@ -139,6 +141,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/update_appointment_page.dart b/lib/views/appoinments/update_appointment_page.dart index b918815..2e9ae5f 100644 --- a/lib/views/appoinments/update_appointment_page.dart +++ b/lib/views/appoinments/update_appointment_page.dart @@ -37,8 +37,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( @@ -96,7 +98,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 || @@ -228,6 +233,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 343a395..2af6f00 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'; @@ -69,11 +73,22 @@ class HomeFragment extends StatelessWidget { context.read().onNavbarTapped(1); }).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(), @@ -84,7 +99,9 @@ class HomeFragment extends StatelessWidget { ).horPaddingMain(), const ServiceProviderWidget().horPaddingMain(), ], - ).toWhiteContainer(width: double.infinity,), + ).toWhiteContainer( + width: double.infinity, + ), Consumer( builder: (BuildContext context, AdVM adVM, Widget? child) { if (adVM.state == ViewState.busy) { 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 895771b..47d7ff9 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 model.branches == null || model.branches!.data == null - ? Center(child: Text(LocaleKeys.noBranchFound.tr())) + ? Center(child: LocaleKeys.noBranchFound.tr().toText(fontSize: 16, color: MyColors.lightTextColor, fontWeight: MyFonts.Medium)) : model.branches!.data!.serviceProviderBranch != null && model.branches!.data!.serviceProviderBranch!.isEmpty - ? Center(child: Text(LocaleKeys.no_branch.tr())) + ? Center(child: LocaleKeys.no_branch.tr().toText(fontSize: 16, color: MyColors.lightTextColor, fontWeight: MyFonts.Medium)) : ListView.builder( itemCount: model.branches!.data!.serviceProviderBranch!.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 ff32a8e..357ac7f 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, _) { @@ -350,13 +333,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 cc0018d..d11973c 100644 --- a/lib/views/settings/schedule/add_schedules_page.dart +++ b/lib/views/settings/schedule/add_schedules_page.dart @@ -309,7 +309,7 @@ class _AddSchedulesPageState extends State { "fromDate": startDate, "toDate": endDate, "startTime": startTime, - "endTime": endDate, + "endTime": endTime, "slotDurationMinute": slotsTime, "perSlotAppointment": appointmentPerSlot, "deliveryServiceType": 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 57c86d5..3605cec 100644 --- a/lib/views/settings/services/create_services_page3.dart +++ b/lib/views/settings/services/create_services_page3.dart @@ -1,6 +1,8 @@ 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'; import 'package:mc_common_app/view_models/service_view_model.dart'; import 'package:car_provider_app/views/settings/services/services_list_page.dart'; import 'package:flutter/material.dart'; @@ -266,9 +268,10 @@ 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); } updateService(BuildContext context, ServiceVM model) async { @@ -286,7 +289,9 @@ 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