diff --git a/lib/extensions/string_extensions.dart b/lib/extensions/string_extensions.dart index 70ca99d..c9eea3b 100644 --- a/lib/extensions/string_extensions.dart +++ b/lib/extensions/string_extensions.dart @@ -1,3 +1,5 @@ +import 'dart:developer'; + import 'package:auto_size_text/auto_size_text.dart'; import 'package:easy_localization/easy_localization.dart'; import 'package:flutter/cupertino.dart'; diff --git a/lib/repositories/shipping_repo.dart b/lib/repositories/shipping_repo.dart index da87b8d..baa2a46 100644 --- a/lib/repositories/shipping_repo.dart +++ b/lib/repositories/shipping_repo.dart @@ -28,7 +28,7 @@ class ShippingRepoImp extends ShippingRepo { String token = appState.getUser.data!.accessToken ?? ""; Map queryParameters = { "requestID": "${requestId ?? 0}", - "shippingStatus": "${shippingStatusEnum != null ? shippingStatusEnum.getIdFromShippingStatusEnum() : 0}", + "shippingStatus": "${shippingStatusEnum != null ? shippingStatusEnum.getIdFromShippingStatusEnum() : -1}", // -1 to get all requests }; GenericRespModel genericRespModel = await apiClient.postJsonForObject( diff --git a/lib/services/common_services.dart b/lib/services/common_services.dart index 81f2e8c..0fb15c3 100644 --- a/lib/services/common_services.dart +++ b/lib/services/common_services.dart @@ -1,5 +1,6 @@ import 'dart:io'; +import 'package:easy_localization/easy_localization.dart'; import 'package:file_picker/file_picker.dart'; import 'package:flutter/material.dart'; import 'package:geolocator/geolocator.dart'; @@ -81,7 +82,7 @@ class CommonServicesImp implements CommonAppServices { } if (imageModels.length > GlobalConsts.maxFileCount) { - Utils.showToast(LocaleKeys.maxFileSelection); + Utils.showToast(LocaleKeys.maxFileSelection.tr()); imageModels = imageModels.sublist(0, GlobalConsts.maxFileCount); // Keep only the first 7 images } diff --git a/lib/utils/utils.dart b/lib/utils/utils.dart index bffe45d..0389b78 100644 --- a/lib/utils/utils.dart +++ b/lib/utils/utils.dart @@ -4,11 +4,14 @@ import 'dart:typed_data'; 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/generated/locale_keys.g.dart'; import 'package:mc_common_app/utils/date_helper.dart'; import 'package:mc_common_app/utils/dialogs_and_bottomsheets.dart'; import 'package:mc_common_app/utils/navigator.dart'; +import 'package:mc_common_app/views/setting_options/widgets/custom_setting_options_tile.dart'; import 'package:mc_common_app/widgets/button/show_fill_button.dart'; +import 'package:mc_common_app/widgets/common_widgets/info_bottom_sheet.dart'; import 'package:mc_common_app/widgets/extensions/extensions_widget.dart'; import 'package:path/path.dart' as p; @@ -636,4 +639,57 @@ class Utils { ShareResult result = await Share.share(GlobalConsts.getAppInvitationLink(), subject: 'Join Mowater'); return result; } + + static buildProviderContactInfoBottomSheet({required BuildContext context, required String? email, required String? mobileNo}) { + return showModalBottomSheet( + context: context, + isScrollControlled: true, + enableDrag: true, + builder: (BuildContext context) { + return InfoBottomSheet( + title: LocaleKeys.contactDetails.tr().toText(fontSize: 28, isBold: true, letterSpacing: -1.44), + description: Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + if (mobileNo != null && mobileNo.isNotEmpty) ...[ + CustomSettingOptionsTile( + leadingWidget: const Icon( + Icons.call, + size: 20, + color: MyColors.greyColor, + ), + titleText: LocaleKeys.phoneNumber.tr(), + subTitle: " $mobileNo", + needBorderBelow: true, + showTrailingArrow: false, + subtitleTextColor: MyColors.greyColor, + onTap: () { + Utils.openNumberViaCaller(phoneNumber: mobileNo); + }, + ), + ], + if (email != null && email.isNotEmpty) ...[ + CustomSettingOptionsTile( + leadingWidget: const Icon( + Icons.email_outlined, + size: 20, + color: MyColors.greyColor, + ), + titleText: LocaleKeys.emailAddress.tr(), + subTitle: " $email", + needBorderBelow: false, + showTrailingArrow: false, + subtitleTextColor: MyColors.greyColor, + onTap: () { + Utils.openEmailViaEmailApp(emailAddress: email); + }, + ), + ], + 30.height, + ], + ), + ); + }, + ); + } } diff --git a/lib/view_models/shipping_management_view_model.dart b/lib/view_models/shipping_management_view_model.dart index 91f541f..b1b23e0 100644 --- a/lib/view_models/shipping_management_view_model.dart +++ b/lib/view_models/shipping_management_view_model.dart @@ -51,7 +51,12 @@ class ShippingManagementVM extends BaseVM { shippingRequestFilterOptions.add(FilterListModel(title: shippingStatusEnums[i].enumValueStr, isSelected: false, id: shippingStatusEnums[i].enumValue)); shippingRequestStatusesList.add(FilterListModel(title: shippingStatusEnums[i].enumValueStr, isSelected: false, id: shippingStatusEnums[i].enumValue)); } - shippingRequestFilterOptions.insert(0, FilterListModel(title: Utils.getNameByShippingRequestStatusEnum(0.toShippingStatusEnum()), isSelected: false, id: 0)); + + int index = shippingRequestFilterOptions.indexWhere((element) => element.id == 0); + if (index == -1) { + log("index: $index"); + shippingRequestFilterOptions.insert(0, FilterListModel(title: Utils.getNameByShippingRequestStatusEnum(0.toShippingStatusEnum()), isSelected: false, id: 0)); + } shippingRequestFilterOptions.insert(0, FilterListModel(title: Utils.getNameByShippingRequestStatusEnum(ShippingRequestStatusEnum.allRequests), isSelected: true, id: -1)); notifyListeners(); } @@ -66,8 +71,6 @@ class ShippingManagementVM extends BaseVM { notifyListeners(); return; } - log("shippingRequestStatusEnum.getIdFromShippingStatusEnum(): ${shippingRequestStatusEnum.getIdFromShippingStatusEnum()}"); - log("shippingRequestFilterOptions: ${shippingRequestFilterOptions[shippingRequestStatusEnum.getIdFromShippingStatusEnum() + 1].title}"); shippingRequestFilterOptions[shippingRequestStatusEnum.getIdFromShippingStatusEnum() + 1].isSelected = true; // +1 to match with the index 0 index has all requests await getShippingRequestsListByFilters(shippingStatusEnum: shippingRequestStatusEnum); notifyListeners(); diff --git a/lib/views/appointments/book_appointment_schedules_view.dart b/lib/views/appointments/book_appointment_schedules_view.dart index 05318d2..02cd976 100644 --- a/lib/views/appointments/book_appointment_schedules_view.dart +++ b/lib/views/appointments/book_appointment_schedules_view.dart @@ -28,7 +28,7 @@ class ScreenArgumentsForAppointmentDetailPage { class BookAppointmentSchedulesView extends StatelessWidget { final ScreenArgumentsForAppointmentDetailPage screenArgumentsForAppointmentDetailPage; - const BookAppointmentSchedulesView({Key? key, required this.screenArgumentsForAppointmentDetailPage}) : super(key: key); + const BookAppointmentSchedulesView({super.key, required this.screenArgumentsForAppointmentDetailPage}); @override Widget build(BuildContext context) { diff --git a/lib/views/appointments/review_appointment_view.dart b/lib/views/appointments/review_appointment_view.dart index 3badab3..122ec25 100644 --- a/lib/views/appointments/review_appointment_view.dart +++ b/lib/views/appointments/review_appointment_view.dart @@ -1,5 +1,3 @@ -import 'dart:developer'; - import 'package:easy_localization/easy_localization.dart'; import 'package:flutter/material.dart'; import 'package:mc_common_app/classes/app_state.dart'; @@ -14,70 +12,13 @@ import 'package:mc_common_app/theme/colors.dart'; import 'package:mc_common_app/utils/enums.dart'; import 'package:mc_common_app/utils/utils.dart'; import 'package:mc_common_app/view_models/appointments_view_model.dart'; -import 'package:mc_common_app/views/setting_options/widgets/custom_setting_options_tile.dart'; import 'package:mc_common_app/widgets/button/show_fill_button.dart'; import 'package:mc_common_app/widgets/common_widgets/app_bar.dart'; -import 'package:mc_common_app/widgets/common_widgets/info_bottom_sheet.dart'; import 'package:mc_common_app/widgets/extensions/extensions_widget.dart'; import 'package:provider/provider.dart'; class ReviewAppointment extends StatelessWidget { - const ReviewAppointment({Key? key}) : super(key: key); - - // buildProviderContactInfoBottomSheet(BuildContext context) { - // final appointmentsVM = context.read(); - // log(": ${appointmentsVM.selectedBranchModel}"); - // return showModalBottomSheet( - // context: context, - // isScrollControlled: true, - // enableDrag: true, - // builder: (BuildContext context) { - // return InfoBottomSheet( - // title: LocaleKeys.contactDetails.tr().toText(fontSize: 28, isBold: true, letterSpacing: -1.44), - // description: Column( - // crossAxisAlignment: CrossAxisAlignment.start, - // children: [ - // if (requestVM.currentSelectedOffer!.mobileNo != null && requestVM.currentSelectedOffer!.mobileNo!.isNotEmpty) ...[ - // CustomSettingOptionsTile( - // leadingWidget: const Icon( - // Icons.call, - // size: 20, - // color: MyColors.greyColor, - // ), - // titleText: LocaleKeys.phoneNumber.tr(), - // subTitle: " ${requestVM.currentSelectedOffer!.mobileNo ?? ""}", - // needBorderBelow: true, - // showTrailingArrow: false, - // subtitleTextColor: MyColors.greyColor, - // onTap: () { - // Utils.openNumberViaCaller(phoneNumber: requestVM.currentSelectedOffer!.mobileNo ?? ""); - // }, - // ), - // ], - // if (requestVM.currentSelectedOffer!.email != null && requestVM.currentSelectedOffer!.email!.isNotEmpty) ...[ - // CustomSettingOptionsTile( - // leadingWidget: const Icon( - // Icons.email_outlined, - // size: 20, - // color: MyColors.greyColor, - // ), - // titleText: LocaleKeys.emailAddress.tr(), - // subTitle: " ${requestVM.currentSelectedOffer!.email ?? ""}", - // needBorderBelow: false, - // showTrailingArrow: false, - // subtitleTextColor: MyColors.greyColor, - // onTap: () { - // Utils.openEmailViaEmailApp(emailAddress: requestVM.currentSelectedOffer!.email ?? ""); - // }, - // ), - // ], - // 30.height, - // ], - // ), - // ); - // }, - // ); - // } + const ReviewAppointment({super.key}); Widget showItem(String title, String value) { return Row( @@ -440,7 +381,7 @@ class ReviewAppointment extends StatelessWidget { actions: [ IconButton( onPressed: () { - // buildProviderContactInfoBottomSheet(context); + // Utils.buildProviderContactInfoBottomSheet(context: context, email:, mobileNo:); }, icon: const Icon(Icons.help_outline_outlined).paddingOnly(right: 21), ), diff --git a/lib/views/requests/review_request_offer.dart b/lib/views/requests/review_request_offer.dart index 891236d..b6e5df5 100644 --- a/lib/views/requests/review_request_offer.dart +++ b/lib/views/requests/review_request_offer.dart @@ -275,61 +275,6 @@ class _ReviewRequestOfferState extends State { ); } - buildProviderContactInfoBottomSheet(BuildContext context) { - final requestVM = context.read(); - - return showModalBottomSheet( - context: context, - isScrollControlled: true, - enableDrag: true, - builder: (BuildContext context) { - return InfoBottomSheet( - title: LocaleKeys.contactDetails.tr().toText(fontSize: 28, isBold: true, letterSpacing: -1.44), - description: Column( - crossAxisAlignment: CrossAxisAlignment.start, - children: [ - if (requestVM.currentSelectedOffer!.mobileNo != null && requestVM.currentSelectedOffer!.mobileNo!.isNotEmpty) ...[ - CustomSettingOptionsTile( - leadingWidget: const Icon( - Icons.call, - size: 20, - color: MyColors.greyColor, - ), - titleText: LocaleKeys.phoneNumber.tr(), - subTitle: " ${requestVM.currentSelectedOffer!.mobileNo ?? ""}", - needBorderBelow: true, - showTrailingArrow: false, - subtitleTextColor: MyColors.greyColor, - onTap: () { - Utils.openNumberViaCaller(phoneNumber: requestVM.currentSelectedOffer!.mobileNo ?? ""); - }, - ), - ], - if (requestVM.currentSelectedOffer!.email != null && requestVM.currentSelectedOffer!.email!.isNotEmpty) ...[ - CustomSettingOptionsTile( - leadingWidget: const Icon( - Icons.email_outlined, - size: 20, - color: MyColors.greyColor, - ), - titleText: LocaleKeys.emailAddress.tr(), - subTitle: " ${requestVM.currentSelectedOffer!.email ?? ""}", - needBorderBelow: false, - showTrailingArrow: false, - subtitleTextColor: MyColors.greyColor, - onTap: () { - Utils.openEmailViaEmailApp(emailAddress: requestVM.currentSelectedOffer!.email ?? ""); - }, - ), - ], - 30.height, - ], - ), - ); - }, - ); - } - @override Widget build(BuildContext context) { return Scaffold( @@ -340,7 +285,14 @@ class _ReviewRequestOfferState extends State { onBackButtonTapped: () => Navigator.pop(context), actions: [ IconButton( - onPressed: () => buildProviderContactInfoBottomSheet(context), + onPressed: () { + final requestVM = context.read(); + Utils.buildProviderContactInfoBottomSheet( + context: context, + email: requestVM.currentSelectedOffer!.email, + mobileNo: requestVM.currentSelectedOffer!.mobileNo, + ); + }, icon: const Icon(Icons.help_outline_outlined).paddingOnly(right: 21), ), ], diff --git a/lib/views/shipping_management/shipping_management_view.dart b/lib/views/shipping_management/shipping_management_view.dart index 4d01e4c..e134c93 100644 --- a/lib/views/shipping_management/shipping_management_view.dart +++ b/lib/views/shipping_management/shipping_management_view.dart @@ -121,7 +121,8 @@ class _ShippingManagementViewState extends State { if (status) { pop(context); int index = shippingManagementVM.shippingRequestFilterOptions.indexWhere((element) => element.isSelected); - await shippingManagementVM.getShippingRequestsListByFilters(shippingStatusEnum: index.toShippingStatusEnum()); + int id = shippingManagementVM.shippingRequestFilterOptions[index].id; + await shippingManagementVM.getShippingRequestsListByFilters(shippingStatusEnum: id.toShippingStatusEnum()); } }, maxWidth: double.infinity, @@ -164,12 +165,11 @@ class _ShippingManagementViewState extends State { child: RefreshIndicator( onRefresh: () async { int index = shippingVm.shippingRequestFilterOptions.indexWhere((element) => element.isSelected); - await shippingVm.getShippingRequestsListByFilters(shippingStatusEnum: index.toShippingStatusEnum()); + int id = shippingVm.shippingRequestFilterOptions[index].id; + await shippingVm.getShippingRequestsListByFilters(shippingStatusEnum: id.toShippingStatusEnum()); }, child: (shippingVm.state == ViewState.busy) - ? const Center( - child: CircularProgressIndicator(), - ) + ? const Center(child: CircularProgressIndicator()) : shippingVm.shippingRequestsList.isEmpty ? Center(child: LocaleKeys.noRequeststoShow.tr().toText(fontSize: 16, color: MyColors.lightTextColor)) : ListView.separated( diff --git a/lib/widgets/common_widgets/provider_details_card.dart b/lib/widgets/common_widgets/provider_details_card.dart index d02772b..8954fa5 100644 --- a/lib/widgets/common_widgets/provider_details_card.dart +++ b/lib/widgets/common_widgets/provider_details_card.dart @@ -20,7 +20,7 @@ class ProviderDetailCard extends StatelessWidget { final bool isFromFavoriteList; const ProviderDetailCard({ - Key? key, + super.key, required this.providerImageUrl, required this.title, required this.totalBranches, @@ -29,19 +29,31 @@ class ProviderDetailCard extends StatelessWidget { required this.startedSince, required this.onCardTapped, this.isFromFavoriteList = false, - }) : super(key: key); + }); @override Widget build(BuildContext context) { + String nameInitials = ""; + if (title.isNotEmpty) { + nameInitials = title[0]; + } return Row( crossAxisAlignment: CrossAxisAlignment.start, children: [ - Image.asset( - providerImageUrl, - width: 80, - height: 85, - fit: BoxFit.cover, - ), + if (isFromFavoriteList) ...[ + CircleAvatar( + radius: 22, + backgroundColor: MyColors.darkPrimaryColor, + child: nameInitials.toText(fontSize: 25, isBold: true), + ), + ] else ...[ + Image.asset( + providerImageUrl, + width: 80, + height: 85, + fit: BoxFit.cover, + ), + ], 12.width, Expanded( child: Column(