From f7356592a04d3e33918d5aca77b96a466b558ccb Mon Sep 17 00:00:00 2001 From: Faiz Hashmi Date: Wed, 25 Dec 2024 11:22:51 +0300 Subject: [PATCH] Minor Fixes --- lib/extensions/string_extensions.dart | 36 +++- lib/models/general_models/enums_model.dart | 13 +- lib/repositories/appointment_repo.dart | 1 + lib/repositories/setting_options_repo.dart | 9 +- lib/utils/enums.dart | 8 + lib/utils/utils.dart | 31 +++ lib/view_models/ad_view_model.dart | 1 + lib/view_models/appointments_view_model.dart | 20 +- lib/view_models/requests_view_model.dart | 13 +- .../setting_options_view_model.dart | 15 +- .../shipping_management_view_model.dart | 8 +- .../book_appointment_schedules_view.dart | 22 ++- lib/views/chat/chat_view.dart | 179 +++++++++--------- .../setting_options_invite_friends.dart | 6 +- lib/widgets/dropdown/dropdow_field.dart | 2 +- 15 files changed, 227 insertions(+), 137 deletions(-) diff --git a/lib/extensions/string_extensions.dart b/lib/extensions/string_extensions.dart index c9eea3b..7a07061 100644 --- a/lib/extensions/string_extensions.dart +++ b/lib/extensions/string_extensions.dart @@ -975,7 +975,7 @@ extension ShippingStatusEnumExt on int { return ShippingRequestStatusEnum.inTransit; } else if (this == 3) { return ShippingRequestStatusEnum.outForDelivery; - } else if (this == 4) { + } else if (this == 4) { return ShippingRequestStatusEnum.delivered; } return ShippingRequestStatusEnum.pending; @@ -995,8 +995,10 @@ extension ShippingStatusEnumToInt on ShippingRequestStatusEnum { return 3; case ShippingRequestStatusEnum.delivered: return 4; + case ShippingRequestStatusEnum.allRequests: + return -1; default: - return 0; + return -1; } } } @@ -1009,3 +1011,33 @@ extension CapitalizeFirstLetter on String { return this[0].toUpperCase() + substring(1).toLowerCase(); } } + +// Extension to convert InviteType to corresponding integer +extension InviteTypeToInt on InviteTypeEnum { + int toIntFromEnum() { + switch (this) { + case InviteTypeEnum.whatsapp: + return 1; + case InviteTypeEnum.sms: + return 2; + case InviteTypeEnum.email: + return 3; + } + } +} + +// Extension to convert integer to corresponding InviteType +extension IntToInviteType on int { + InviteTypeEnum get toInviteTypeFromInt { + switch (this) { + case 1: + return InviteTypeEnum.whatsapp; + case 2: + return InviteTypeEnum.sms; + case 3: + return InviteTypeEnum.email; + default: + throw ArgumentError('Invalid integer value: $this'); + } + } +} diff --git a/lib/models/general_models/enums_model.dart b/lib/models/general_models/enums_model.dart index e8fa217..77a58df 100644 --- a/lib/models/general_models/enums_model.dart +++ b/lib/models/general_models/enums_model.dart @@ -2,6 +2,7 @@ class EnumsModel { int id; int enumTypeId; String enumValueStr; + String enumValueStrDes; int enumValue; bool isActive; @@ -9,6 +10,7 @@ class EnumsModel { required this.id, required this.enumTypeId, required this.enumValueStr, + required this.enumValueStrDes, required this.enumValue, required this.isActive, }); @@ -17,20 +19,13 @@ class EnumsModel { id: json["id"], enumTypeId: json["enumTypeID"], enumValueStr: json["enumValueStr"], + enumValueStrDes: json["enumValueStrDes"] ?? json["enumValueStr"], enumValue: json["enumValue"], isActive: json["isActive"], ); @override String toString() { - return 'EnumsModel{id: $id, enumTypeId: $enumTypeId, enumValueStr: $enumValueStr, enumValue: $enumValue, isActive: $isActive}'; + return 'EnumsModel{id: $id, enumTypeId: $enumTypeId, enumValueStr: $enumValueStr,enumValueStrDes: $enumValueStrDes, enumValue: $enumValue, isActive: $isActive}'; } - - Map toJson() => { - "id": id, - "enumTypeID": enumTypeId, - "enumValueStr": enumValueStr, - "enumValue": enumValue, - "isActive": isActive, - }; } diff --git a/lib/repositories/appointment_repo.dart b/lib/repositories/appointment_repo.dart index 9e1c798..9a25aeb 100644 --- a/lib/repositories/appointment_repo.dart +++ b/lib/repositories/appointment_repo.dart @@ -170,6 +170,7 @@ class AppointmentRepoImp implements AppointmentRepo { index = 0; } + slotId = schedule.selectedCustomTimeDateSlotModel!.availableSlots![index].slotId; mapList.add({ diff --git a/lib/repositories/setting_options_repo.dart b/lib/repositories/setting_options_repo.dart index 6213a94..b2c2888 100644 --- a/lib/repositories/setting_options_repo.dart +++ b/lib/repositories/setting_options_repo.dart @@ -20,7 +20,7 @@ abstract class SettingOptionsRepo { Future> getTermsAndConditions(); - Future appInvitationCreate({required int channelId}); + Future appInvitationCreate({required int channelId, required String message}); } class SettingOptionsRepoImp extends SettingOptionsRepo { @@ -154,15 +154,15 @@ class SettingOptionsRepoImp extends SettingOptionsRepo { } @override - Future appInvitationCreate({required int channelId}) async { + Future appInvitationCreate({required int channelId, required String message}) async { String token = appState.getUser.data!.accessToken ?? ""; final params = { "channelID": channelId.toString(), - "comments": "string", + "comments": message, }; - if (AppState().currentAppType == AppType.provider) { + if (AppState().currentAppType == AppType.customer) { params.addAll({ "customerID": (appState.getUser.data!.userInfo!.customerId ?? "0").toString(), }); @@ -178,5 +178,6 @@ class SettingOptionsRepoImp extends SettingOptionsRepo { token: token, params, ); + return genericRespModel; } } diff --git a/lib/utils/enums.dart b/lib/utils/enums.dart index 8370c45..ac49de5 100644 --- a/lib/utils/enums.dart +++ b/lib/utils/enums.dart @@ -233,3 +233,11 @@ enum ShippingRequestStatusEnum { outForDelivery, delivered, } + + +enum InviteTypeEnum { + whatsapp, + sms, + email, +} + diff --git a/lib/utils/utils.dart b/lib/utils/utils.dart index 0389b78..ea99f77 100644 --- a/lib/utils/utils.dart +++ b/lib/utils/utils.dart @@ -640,6 +640,37 @@ class Utils { return result; } + static Future inviteFriend({required InviteTypeEnum inviteTypeEnum, required String message}) async { + String url; + + switch (inviteTypeEnum) { + case InviteTypeEnum.whatsapp: + // WhatsApp requires a phone number and message, format like this: + url = 'https://wa.me/?text=${Uri.encodeComponent(message)}'; + break; + + case InviteTypeEnum.sms: + // SMS: 'sms:?body=' + // You can add a phone number, or keep it empty to allow the user to input one. + url = 'sms:?body=${Uri.encodeComponent(message)}'; + break; + + case InviteTypeEnum.email: + // Email: 'mailto:?subject=&body=' + url = 'mailto:?subject=MowaterInvitation&body=${Uri.encodeComponent(message)}'; + break; + } + + // Try to launch the URL and catch any exceptions. + if (await canLaunchUrl(Uri.parse(url))) { + try { + await launchUrl(Uri.parse(url), mode: LaunchMode.externalApplication); + } catch (e) { + await launchUrl(Uri.parse(url), mode: LaunchMode.externalApplication); + } + } + } + static buildProviderContactInfoBottomSheet({required BuildContext context, required String? email, required String? mobileNo}) { return showModalBottomSheet( context: context, diff --git a/lib/view_models/ad_view_model.dart b/lib/view_models/ad_view_model.dart index 0cd6a00..b47916a 100644 --- a/lib/view_models/ad_view_model.dart +++ b/lib/view_models/ad_view_model.dart @@ -580,6 +580,7 @@ class AdVM extends BaseVM { return; } vehicleBrandId = id; + vehicleModelId = SelectionModel(selectedOption: "", selectedId: -1, errorValue: ""); await getVehicleDetailsByVehicleBrandId(); notifyListeners(); diff --git a/lib/view_models/appointments_view_model.dart b/lib/view_models/appointments_view_model.dart index 82770d0..5897b6f 100644 --- a/lib/view_models/appointments_view_model.dart +++ b/lib/view_models/appointments_view_model.dart @@ -573,9 +573,9 @@ class AppointmentsVM extends BaseVM { element.isSelected = false; } } - int index = serviceAppointmentScheduleList[scheduleIndex].selectedDateIndex!; - serviceAppointmentScheduleList[scheduleIndex].customTimeDateSlotList![index].availableSlots![slotIndex].isSelected = true; - serviceAppointmentScheduleList[scheduleIndex].selectedCustomTimeDateSlotModel!.availableSlots = serviceAppointmentScheduleList[scheduleIndex].customTimeDateSlotList![index].availableSlots!; + int dateIndex = serviceAppointmentScheduleList[scheduleIndex].selectedDateIndex!; + serviceAppointmentScheduleList[scheduleIndex].customTimeDateSlotList![dateIndex].availableSlots![slotIndex].isSelected = true; + serviceAppointmentScheduleList[scheduleIndex].selectedCustomTimeDateSlotModel!.availableSlots = serviceAppointmentScheduleList[scheduleIndex].customTimeDateSlotList![dateIndex].availableSlots!; notifyListeners(); } @@ -633,7 +633,7 @@ class AppointmentsVM extends BaseVM { } branchesCategoriesFilterOptions[index].isSelected = true; - await getBranchesBasedOnCategoryFilters(categoryId: branchesCategoriesFilterOptions[index].id); + await getBranchesBasedOnCategoryFilters(serviceId: branchesCategoriesFilterOptions[index].id); notifyListeners(); } @@ -1023,9 +1023,9 @@ class AppointmentsVM extends BaseVM { if (branchesCategoriesFilterOptions.isNotEmpty) return; branchesCategoriesFilterOptions.clear(); setOnlyState(ViewState.busy); - Category category = await branchRepo.fetchBranchCategory(); - category.data?.forEach((element) { - branchesCategoriesFilterOptions.add(FilterListModel(id: element.id ?? 0, isSelected: false, iconUrl: element.serviceCategoryIconUrl ?? "", title: element.categoryName ?? "N/A")); + Services services = await branchRepo.fetchServicesByCategoryId(serviceCategoryId: -1); + services.data?.forEach((element) { + branchesCategoriesFilterOptions.add(FilterListModel(id: element.id ?? 0, isSelected: false, iconUrl: element.serviceIconUrl ?? "", title: element.description ?? "")); }); branchesCategoriesFilterOptions.insert(0, FilterListModel(id: 0, isSelected: true, title: "All Branches")); notifyListeners(); @@ -1440,15 +1440,15 @@ class AppointmentsVM extends BaseVM { setState(ViewState.idle); } - Future getBranchesBasedOnCategoryFilters({required int categoryId}) async { + Future getBranchesBasedOnCategoryFilters({required int serviceId}) async { setState(ViewState.busy); - if (categoryId == 0) { + if (serviceId == 0) { await getAllNearBranches(); return; } nearbyBranches.clear(); nearbyBranches = await branchRepo.getBranchesByFilters( - categoryIdsList: [categoryId], + serviceIdsList: [serviceId], latitude: AppState().currentLocation.latitude, longitude: AppState().currentLocation.longitude, ); diff --git a/lib/view_models/requests_view_model.dart b/lib/view_models/requests_view_model.dart index d502c99..41ef7be 100644 --- a/lib/view_models/requests_view_model.dart +++ b/lib/view_models/requests_view_model.dart @@ -783,7 +783,7 @@ class RequestsVM extends BaseVM { requestImages.add(element.toJson()); }); - // try { + try { GenericRespModel respModel = await requestRepo.createRequest( requestTypeId: requestTypeId.selectedId, vehicleTypeId: vehicleTypeId.selectedId, @@ -802,6 +802,7 @@ class RequestsVM extends BaseVM { ); Utils.hideLoading(context); if (respModel.messageStatus == 1) { + log("requestTypeId.selectedId.toRequestTypeEnum(): ${requestTypeId.selectedId.toRequestTypeEnum()}"); Utils.showToast(LocaleKeys.requestSuccessfullyCreated.tr()); Navigator.pop(context); await applyFilterOnRequestsVM(requestsTypeEnum: requestTypeId.selectedId.toRequestTypeEnum()); @@ -809,11 +810,11 @@ class RequestsVM extends BaseVM { } else { Utils.showToast(respModel.message.toString()); } - // } catch (e, s) { - // Utils.hideLoading(context); - // log(e.toString()); - // Utils.showToast(e.toString()); - // } + } catch (e, s) { + Utils.hideLoading(context); + log(e.toString()); + Utils.showToast(e.toString()); + } } } diff --git a/lib/view_models/setting_options_view_model.dart b/lib/view_models/setting_options_view_model.dart index 07b9788..4ce8e7e 100644 --- a/lib/view_models/setting_options_view_model.dart +++ b/lib/view_models/setting_options_view_model.dart @@ -1,5 +1,8 @@ import 'package:flutter/cupertino.dart'; +import 'package:mc_common_app/classes/consts.dart'; +import 'package:mc_common_app/extensions/string_extensions.dart'; import 'package:mc_common_app/main.dart'; +import 'package:mc_common_app/models/general_models/generic_resp_model.dart'; import 'package:mc_common_app/models/setting_utils_models/app_info_model.dart'; import 'package:mc_common_app/models/setting_utils_models/contact_infos_model.dart'; import 'package:mc_common_app/models/setting_utils_models/faqs_model.dart'; @@ -74,19 +77,15 @@ class SettingOptionsVM extends BaseVM { } } - Future appInvitationCreate({required BuildContext context, required int channelId}) async { - ShareResult result = await Utils.shareAppInvitation(); - - if (result.status != ShareResultStatus.success) { - return; - } + Future appInvitationCreate({required BuildContext context, required InviteTypeEnum inviteTypeEnum}) async { Utils.showLoading(context); try { - await settingOptionsRepo.appInvitationCreate(channelId: channelId); + GenericRespModel respModel = await settingOptionsRepo.appInvitationCreate(channelId: inviteTypeEnum.toIntFromEnum(), message: GlobalConsts.getAppInvitationLink()); + await Utils.inviteFriend(inviteTypeEnum: inviteTypeEnum, message: GlobalConsts.getAppInvitationLink()); + Utils.hideLoading(context); } catch (e) { logger.i(e.toString()); - Utils.showToast(e.toString()); Utils.hideLoading(context); } } diff --git a/lib/view_models/shipping_management_view_model.dart b/lib/view_models/shipping_management_view_model.dart index b1b23e0..b981134 100644 --- a/lib/view_models/shipping_management_view_model.dart +++ b/lib/view_models/shipping_management_view_model.dart @@ -48,8 +48,8 @@ class ShippingManagementVM extends BaseVM { shippingRequestFilterOptions.clear(); shippingRequestStatusesList.clear(); for (int i = 0; i < shippingStatusEnums.length; i++) { - 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.add(FilterListModel(title: shippingStatusEnums[i].enumValueStrDes, isSelected: false, id: shippingStatusEnums[i].enumValue)); + shippingRequestStatusesList.add(FilterListModel(title: shippingStatusEnums[i].enumValueStrDes, isSelected: false, id: shippingStatusEnums[i].enumValue)); } int index = shippingRequestFilterOptions.indexWhere((element) => element.id == 0); @@ -62,6 +62,7 @@ class ShippingManagementVM extends BaseVM { } Future applyFiltersOnShippingRequests({required ShippingRequestStatusEnum shippingRequestStatusEnum}) async { + log("ship: $shippingRequestStatusEnum"); for (var value in shippingRequestFilterOptions) { value.isSelected = false; } @@ -71,7 +72,8 @@ class ShippingManagementVM extends BaseVM { notifyListeners(); return; } - shippingRequestFilterOptions[shippingRequestStatusEnum.getIdFromShippingStatusEnum() + 1].isSelected = true; // +1 to match with the index 0 index has all requests + int index = shippingRequestFilterOptions.indexWhere((element) => element.id == shippingRequestStatusEnum.getIdFromShippingStatusEnum()); + shippingRequestFilterOptions[index].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 02cd976..51fe789 100644 --- a/lib/views/appointments/book_appointment_schedules_view.dart +++ b/lib/views/appointments/book_appointment_schedules_view.dart @@ -5,9 +5,11 @@ 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/service_schedule_model.dart'; +import 'package:mc_common_app/models/general_models/widgets_models.dart'; import 'package:mc_common_app/models/services_models/service_model.dart'; 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/appointments/widgets/custom_calender_widget.dart'; import 'package:mc_common_app/widgets/button/show_fill_button.dart'; @@ -53,6 +55,7 @@ class BookAppointmentSchedulesView extends StatelessWidget { return ExpansionTile( tilePadding: const EdgeInsets.symmetric(horizontal: 21, vertical: 10), childrenPadding: const EdgeInsets.only(left: 16, bottom: 10, right: 16), + initiallyExpanded: true, title: Column( children: [ Row( @@ -120,6 +123,7 @@ class BookAppointmentSchedulesView extends StatelessWidget { .customTimeDateSlotList![appointmentsVM.serviceAppointmentScheduleList[scheduleIndex].selectedDateIndex!].availableSlots ?? [], onPressed: (slotIndex) { + log("slotIndex: $slotIndex"); appointmentsVM.updateSelectedAppointmentSlotByDate(scheduleIndex: scheduleIndex, slotIndex: slotIndex); }, ), @@ -151,10 +155,26 @@ class BookAppointmentSchedulesView extends StatelessWidget { if (screenArgumentsForAppointmentDetailPage.routeFlag == 1) { appointmentsVM.onReviewButtonPressed(context); } else { + int selectedSlotId = 0; + int index = 0; + List timeSlots = appointmentsVM.serviceAppointmentScheduleList.first.selectedCustomTimeDateSlotModel!.availableSlots ?? []; + if (timeSlots.isNotEmpty) { + index = timeSlots.indexWhere((element) => element.isSelected); + } + + if (index != -1) { + selectedSlotId = timeSlots[index].slotId; + } else { + Utils.showToast("Please select correct date and time."); + return; + } + + log("selectedSlotId: $selectedSlotId"); + appointmentsVM.onRescheduleAppointmentConfirmPressed( context: context, appointmentId: screenArgumentsForAppointmentDetailPage.appointmentId, - selectedSlotId: appointmentsVM.serviceAppointmentScheduleList.first.selectedCustomTimeDateSlotModel!.date!.slotId, + selectedSlotId: selectedSlotId, ); } }, diff --git a/lib/views/chat/chat_view.dart b/lib/views/chat/chat_view.dart index 3cdc2c7..00eee37 100644 --- a/lib/views/chat/chat_view.dart +++ b/lib/views/chat/chat_view.dart @@ -175,20 +175,20 @@ class _ChatViewState extends State { child: chatMessages.isEmpty ? Center(child: LocaleKeys.noChatMessage.tr().toText(fontSize: 16, color: MyColors.lightTextColor, textAlign: TextAlign.center)).paddingAll(22) : ListView.separated( - controller: chatVM.scrollController, - itemCount: chatMessages.length, - separatorBuilder: (BuildContext context, int index) => 20.height, - itemBuilder: (BuildContext context, int index) { - ChatMessageModel chatMessageModel = chatMessages[index]; - return ChatMessageCustomWidget( - chatMessageModel: chatMessageModel, - requestModel: chatTypeEnum == ChatTypeEnum.requestOffer ? chatViewArgumentsForRequest!.requestModel! : null, - requestStatusEnum: requestVM.currentSelectedRequest?.requestStatus, - chatTypeEnum: chatTypeEnum, - requestsTypeEnum: chatTypeEnum == ChatTypeEnum.requestOffer ? chatViewArgumentsForRequest!.requestModel!.requestType.toRequestTypeEnum() : RequestsTypeEnum.specialCarRequest, - ); - }, - ).horPaddingMain(), + controller: chatVM.scrollController, + itemCount: chatMessages.length, + separatorBuilder: (BuildContext context, int index) => 20.height, + itemBuilder: (BuildContext context, int index) { + ChatMessageModel chatMessageModel = chatMessages[index]; + return ChatMessageCustomWidget( + chatMessageModel: chatMessageModel, + requestModel: chatTypeEnum == ChatTypeEnum.requestOffer ? chatViewArgumentsForRequest!.requestModel! : null, + requestStatusEnum: requestVM.currentSelectedRequest?.requestStatus, + chatTypeEnum: chatTypeEnum, + requestsTypeEnum: chatTypeEnum == ChatTypeEnum.requestOffer ? chatViewArgumentsForRequest!.requestModel!.requestType.toRequestTypeEnum() : RequestsTypeEnum.specialCarRequest, + ); + }, + ).horPaddingMain(), ), 10.height, Row( @@ -197,6 +197,7 @@ class _ChatViewState extends State { if (chatTypeEnum == ChatTypeEnum.requestOffer && requestVM.currentSelectedRequest!.requestType.toRequestTypeEnum() == RequestsTypeEnum.serviceRequest && requestVM.currentSelectedRequest!.requestStatus == RequestStatusEnum.inProgress && + requestVM.currentSelectedOffer!.requestOfferStatusEnum == RequestOfferStatusEnum.accepted && AppState().currentAppType == AppType.customer) ...[ Expanded( child: ShowFillButton( @@ -232,90 +233,88 @@ class _ChatViewState extends State { // ), // ] // - else - ...[ - if (AppState().currentAppType == AppType.provider && - chatTypeEnum == ChatTypeEnum.requestOffer && - requestVM.currentSelectedRequest!.requestStatus == RequestStatusEnum.submitted && - chatVM.pickedImagesForMessage.isEmpty) ...[ - Expanded( - flex: 1, - child: const Icon( - Icons.local_offer_rounded, - color: MyColors.darkPrimaryColor, - size: 30, - ).onPress( - () { - requestVM.resetSendOfferBottomSheet(); - RequestDetailPageArguments requestDetailArguments = RequestDetailPageArguments( - requestIndex: chatViewArgumentsForRequest!.requestIndex, - requestModel: chatViewArgumentsForRequest!.requestModel!, - ); - buildSendOfferBottomSheet( - context: context, - requestDetailPageArguments: requestDetailArguments, - isFromChatScreen: true, - offerId: null, // null means creating new offer - ); - }, - ), - ), - ], - if (chatVM.pickedImagesForMessage.isNotEmpty) ...[ - Expanded( - flex: 8, - child: PickedFilesContainer( - pickedFiles: chatVM.pickedImagesForMessage, - onCrossPressedPrimary: chatVM.removeImageFromList, - onAddFilePressed: () => chatVM.pickMultipleImages(), - ), + else ...[ + if (AppState().currentAppType == AppType.provider && + chatTypeEnum == ChatTypeEnum.requestOffer && + requestVM.currentSelectedRequest!.requestStatus == RequestStatusEnum.submitted && + chatVM.pickedImagesForMessage.isEmpty) ...[ + Expanded( + flex: 1, + child: const Icon( + Icons.local_offer_rounded, + color: MyColors.darkPrimaryColor, + size: 30, + ).onPress( + () { + requestVM.resetSendOfferBottomSheet(); + RequestDetailPageArguments requestDetailArguments = RequestDetailPageArguments( + requestIndex: chatViewArgumentsForRequest!.requestIndex, + requestModel: chatViewArgumentsForRequest!.requestModel!, + ); + buildSendOfferBottomSheet( + context: context, + requestDetailPageArguments: requestDetailArguments, + isFromChatScreen: true, + offerId: null, // null means creating new offer + ); + }, ), - ] else - if (chatTypeEnum == ChatTypeEnum.requestOffer) ...[ - Expanded( - flex: 1, - child: const Icon( - Icons.photo_library_rounded, - color: MyColors.darkPrimaryColor, - size: 30, - ).onPress(() => chatVM.pickMultipleImages()), - ), - ], - if (chatVM.pickedImagesForMessage.isEmpty) ...[ - Expanded( - flex: 8, - child: TxtField( - value: chatVM.chatMessageText, - hint: LocaleKeys.typeMessageHere.tr(), - keyboardType: TextInputType.text, - isNeedBorder: false, - onChanged: (v) => chatVM.updateChatMessageText(v), - ), + ), + ], + if (chatVM.pickedImagesForMessage.isNotEmpty) ...[ + Expanded( + flex: 8, + child: PickedFilesContainer( + pickedFiles: chatVM.pickedImagesForMessage, + onCrossPressedPrimary: chatVM.removeImageFromList, + onAddFilePressed: () => chatVM.pickMultipleImages(), ), - ], + ), + ] else if (chatTypeEnum == ChatTypeEnum.requestOffer) ...[ Expanded( flex: 1, - child: const Icon(Icons.send_rounded, color: MyColors.darkPrimaryColor, size: 30).onPress( - () async { - ChatMessageTypeEnum chatMessageTypeEnum = ChatMessageTypeEnum.freeText; + child: const Icon( + Icons.photo_library_rounded, + color: MyColors.darkPrimaryColor, + size: 30, + ).onPress(() => chatVM.pickMultipleImages()), + ), + ], + if (chatVM.pickedImagesForMessage.isEmpty) ...[ + Expanded( + flex: 8, + child: TxtField( + value: chatVM.chatMessageText, + hint: LocaleKeys.typeMessageHere.tr(), + keyboardType: TextInputType.text, + isNeedBorder: false, + onChanged: (v) => chatVM.updateChatMessageText(v), + ), + ), + ], + Expanded( + flex: 1, + child: const Icon(Icons.send_rounded, color: MyColors.darkPrimaryColor, size: 30).onPress( + () async { + ChatMessageTypeEnum chatMessageTypeEnum = ChatMessageTypeEnum.freeText; - if (chatVM.pickedImagesForMessage.isNotEmpty) { - chatMessageTypeEnum = ChatMessageTypeEnum.image; - } - final status = await onMessageSend(chatMessageType: chatMessageTypeEnum); + if (chatVM.pickedImagesForMessage.isNotEmpty) { + chatMessageTypeEnum = ChatMessageTypeEnum.image; + } + final status = await onMessageSend(chatMessageType: chatMessageTypeEnum); - if (status) { - chatVM.scrollChatDown(); - if (chatMessageTypeEnum == ChatMessageTypeEnum.freeText) { - chatVM.clearChatMessageText(); - } else if (chatMessageTypeEnum == ChatMessageTypeEnum.image) { - chatVM.clearPickedImagesForMessage(); - } + if (status) { + chatVM.scrollChatDown(); + if (chatMessageTypeEnum == ChatMessageTypeEnum.freeText) { + chatVM.clearChatMessageText(); + } else if (chatMessageTypeEnum == ChatMessageTypeEnum.image) { + chatVM.clearPickedImagesForMessage(); } - }, - ), + } + }, ), - ], + ), + ], ], ).toContainer(isShadowEnabled: true) ], diff --git a/lib/views/setting_options/setting_options_invite_friends.dart b/lib/views/setting_options/setting_options_invite_friends.dart index 843babd..76c4117 100644 --- a/lib/views/setting_options/setting_options_invite_friends.dart +++ b/lib/views/setting_options/setting_options_invite_friends.dart @@ -40,7 +40,7 @@ class SettingOptionsInviteFriends extends StatelessWidget { needBorderBelow: true, showTrailingArrow: false, onTap: () async { - await context.read().appInvitationCreate(context: context, channelId: 1); + await context.read().appInvitationCreate(context: context, inviteTypeEnum: InviteTypeEnum.whatsapp); }, ), CustomSettingOptionsTile( @@ -53,7 +53,7 @@ class SettingOptionsInviteFriends extends StatelessWidget { needBorderBelow: true, showTrailingArrow: false, onTap: () async { - await context.read().appInvitationCreate(context: context, channelId: 2); + await context.read().appInvitationCreate(context: context, inviteTypeEnum: InviteTypeEnum.sms); }), CustomSettingOptionsTile( leadingWidget: const Icon( @@ -65,7 +65,7 @@ class SettingOptionsInviteFriends extends StatelessWidget { needBorderBelow: false, showTrailingArrow: false, onTap: () async { - await context.read().appInvitationCreate(context: context, channelId: 3); + await context.read().appInvitationCreate(context: context, inviteTypeEnum: InviteTypeEnum.email); }, ), 30.height, diff --git a/lib/widgets/dropdown/dropdow_field.dart b/lib/widgets/dropdown/dropdow_field.dart index 8a2bed5..f3d4b95 100644 --- a/lib/widgets/dropdown/dropdow_field.dart +++ b/lib/widgets/dropdown/dropdow_field.dart @@ -32,7 +32,7 @@ class DropdownField extends StatefulWidget { final TextStyle? textStyle; final bool isSelectAble; - const DropdownField(this.onSelect, {Key? key, this.hint, this.list, this.dropdownValue, this.errorValue = "", this.showAppointmentPickerVariant = false, this.textStyle, this.isSelectAble = true}) : super(key: key); + const DropdownField(this.onSelect, {super.key, this.hint, this.list, this.dropdownValue, this.errorValue = "", this.showAppointmentPickerVariant = false, this.textStyle, this.isSelectAble = true}); @override State createState() => _DropdownFieldState();