Minor Fixes

aamir_dev
Faiz Hashmi 10 months ago
parent 2ae5effe65
commit f7356592a0

@ -975,7 +975,7 @@ extension ShippingStatusEnumExt on int {
return ShippingRequestStatusEnum.inTransit; return ShippingRequestStatusEnum.inTransit;
} else if (this == 3) { } else if (this == 3) {
return ShippingRequestStatusEnum.outForDelivery; return ShippingRequestStatusEnum.outForDelivery;
} else if (this == 4) { } else if (this == 4) {
return ShippingRequestStatusEnum.delivered; return ShippingRequestStatusEnum.delivered;
} }
return ShippingRequestStatusEnum.pending; return ShippingRequestStatusEnum.pending;
@ -995,8 +995,10 @@ extension ShippingStatusEnumToInt on ShippingRequestStatusEnum {
return 3; return 3;
case ShippingRequestStatusEnum.delivered: case ShippingRequestStatusEnum.delivered:
return 4; return 4;
case ShippingRequestStatusEnum.allRequests:
return -1;
default: default:
return 0; return -1;
} }
} }
} }
@ -1009,3 +1011,33 @@ extension CapitalizeFirstLetter on String {
return this[0].toUpperCase() + substring(1).toLowerCase(); 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');
}
}
}

@ -2,6 +2,7 @@ class EnumsModel {
int id; int id;
int enumTypeId; int enumTypeId;
String enumValueStr; String enumValueStr;
String enumValueStrDes;
int enumValue; int enumValue;
bool isActive; bool isActive;
@ -9,6 +10,7 @@ class EnumsModel {
required this.id, required this.id,
required this.enumTypeId, required this.enumTypeId,
required this.enumValueStr, required this.enumValueStr,
required this.enumValueStrDes,
required this.enumValue, required this.enumValue,
required this.isActive, required this.isActive,
}); });
@ -17,20 +19,13 @@ class EnumsModel {
id: json["id"], id: json["id"],
enumTypeId: json["enumTypeID"], enumTypeId: json["enumTypeID"],
enumValueStr: json["enumValueStr"], enumValueStr: json["enumValueStr"],
enumValueStrDes: json["enumValueStrDes"] ?? json["enumValueStr"],
enumValue: json["enumValue"], enumValue: json["enumValue"],
isActive: json["isActive"], isActive: json["isActive"],
); );
@override @override
String toString() { 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<String, dynamic> toJson() => {
"id": id,
"enumTypeID": enumTypeId,
"enumValueStr": enumValueStr,
"enumValue": enumValue,
"isActive": isActive,
};
} }

@ -170,6 +170,7 @@ class AppointmentRepoImp implements AppointmentRepo {
index = 0; index = 0;
} }
slotId = schedule.selectedCustomTimeDateSlotModel!.availableSlots![index].slotId; slotId = schedule.selectedCustomTimeDateSlotModel!.availableSlots![index].slotId;
mapList.add({ mapList.add({

@ -20,7 +20,7 @@ abstract class SettingOptionsRepo {
Future<List<AppInfoModel>> getTermsAndConditions(); Future<List<AppInfoModel>> getTermsAndConditions();
Future<void> appInvitationCreate({required int channelId}); Future<GenericRespModel> appInvitationCreate({required int channelId, required String message});
} }
class SettingOptionsRepoImp extends SettingOptionsRepo { class SettingOptionsRepoImp extends SettingOptionsRepo {
@ -154,15 +154,15 @@ class SettingOptionsRepoImp extends SettingOptionsRepo {
} }
@override @override
Future<void> appInvitationCreate({required int channelId}) async { Future<GenericRespModel> appInvitationCreate({required int channelId, required String message}) async {
String token = appState.getUser.data!.accessToken ?? ""; String token = appState.getUser.data!.accessToken ?? "";
final params = { final params = {
"channelID": channelId.toString(), "channelID": channelId.toString(),
"comments": "string", "comments": message,
}; };
if (AppState().currentAppType == AppType.provider) { if (AppState().currentAppType == AppType.customer) {
params.addAll({ params.addAll({
"customerID": (appState.getUser.data!.userInfo!.customerId ?? "0").toString(), "customerID": (appState.getUser.data!.userInfo!.customerId ?? "0").toString(),
}); });
@ -178,5 +178,6 @@ class SettingOptionsRepoImp extends SettingOptionsRepo {
token: token, token: token,
params, params,
); );
return genericRespModel;
} }
} }

@ -233,3 +233,11 @@ enum ShippingRequestStatusEnum {
outForDelivery, outForDelivery,
delivered, delivered,
} }
enum InviteTypeEnum {
whatsapp,
sms,
email,
}

@ -640,6 +640,37 @@ class Utils {
return result; return result;
} }
static Future<void> 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:<phone_number>?body=<message>'
// 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:<email>?subject=<subject>&body=<message>'
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}) { static buildProviderContactInfoBottomSheet({required BuildContext context, required String? email, required String? mobileNo}) {
return showModalBottomSheet( return showModalBottomSheet(
context: context, context: context,

@ -580,6 +580,7 @@ class AdVM extends BaseVM {
return; return;
} }
vehicleBrandId = id; vehicleBrandId = id;
vehicleModelId = SelectionModel(selectedOption: "", selectedId: -1, errorValue: "");
await getVehicleDetailsByVehicleBrandId(); await getVehicleDetailsByVehicleBrandId();
notifyListeners(); notifyListeners();

@ -573,9 +573,9 @@ class AppointmentsVM extends BaseVM {
element.isSelected = false; element.isSelected = false;
} }
} }
int index = serviceAppointmentScheduleList[scheduleIndex].selectedDateIndex!; int dateIndex = serviceAppointmentScheduleList[scheduleIndex].selectedDateIndex!;
serviceAppointmentScheduleList[scheduleIndex].customTimeDateSlotList![index].availableSlots![slotIndex].isSelected = true; serviceAppointmentScheduleList[scheduleIndex].customTimeDateSlotList![dateIndex].availableSlots![slotIndex].isSelected = true;
serviceAppointmentScheduleList[scheduleIndex].selectedCustomTimeDateSlotModel!.availableSlots = serviceAppointmentScheduleList[scheduleIndex].customTimeDateSlotList![index].availableSlots!; serviceAppointmentScheduleList[scheduleIndex].selectedCustomTimeDateSlotModel!.availableSlots = serviceAppointmentScheduleList[scheduleIndex].customTimeDateSlotList![dateIndex].availableSlots!;
notifyListeners(); notifyListeners();
} }
@ -633,7 +633,7 @@ class AppointmentsVM extends BaseVM {
} }
branchesCategoriesFilterOptions[index].isSelected = true; branchesCategoriesFilterOptions[index].isSelected = true;
await getBranchesBasedOnCategoryFilters(categoryId: branchesCategoriesFilterOptions[index].id); await getBranchesBasedOnCategoryFilters(serviceId: branchesCategoriesFilterOptions[index].id);
notifyListeners(); notifyListeners();
} }
@ -1023,9 +1023,9 @@ class AppointmentsVM extends BaseVM {
if (branchesCategoriesFilterOptions.isNotEmpty) return; if (branchesCategoriesFilterOptions.isNotEmpty) return;
branchesCategoriesFilterOptions.clear(); branchesCategoriesFilterOptions.clear();
setOnlyState(ViewState.busy); setOnlyState(ViewState.busy);
Category category = await branchRepo.fetchBranchCategory(); Services services = await branchRepo.fetchServicesByCategoryId(serviceCategoryId: -1);
category.data?.forEach((element) { services.data?.forEach((element) {
branchesCategoriesFilterOptions.add(FilterListModel(id: element.id ?? 0, isSelected: false, iconUrl: element.serviceCategoryIconUrl ?? "", title: element.categoryName ?? "N/A")); 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")); branchesCategoriesFilterOptions.insert(0, FilterListModel(id: 0, isSelected: true, title: "All Branches"));
notifyListeners(); notifyListeners();
@ -1440,15 +1440,15 @@ class AppointmentsVM extends BaseVM {
setState(ViewState.idle); setState(ViewState.idle);
} }
Future<void> getBranchesBasedOnCategoryFilters({required int categoryId}) async { Future<void> getBranchesBasedOnCategoryFilters({required int serviceId}) async {
setState(ViewState.busy); setState(ViewState.busy);
if (categoryId == 0) { if (serviceId == 0) {
await getAllNearBranches(); await getAllNearBranches();
return; return;
} }
nearbyBranches.clear(); nearbyBranches.clear();
nearbyBranches = await branchRepo.getBranchesByFilters( nearbyBranches = await branchRepo.getBranchesByFilters(
categoryIdsList: [categoryId], serviceIdsList: [serviceId],
latitude: AppState().currentLocation.latitude, latitude: AppState().currentLocation.latitude,
longitude: AppState().currentLocation.longitude, longitude: AppState().currentLocation.longitude,
); );

@ -783,7 +783,7 @@ class RequestsVM extends BaseVM {
requestImages.add(element.toJson()); requestImages.add(element.toJson());
}); });
// try { try {
GenericRespModel respModel = await requestRepo.createRequest( GenericRespModel respModel = await requestRepo.createRequest(
requestTypeId: requestTypeId.selectedId, requestTypeId: requestTypeId.selectedId,
vehicleTypeId: vehicleTypeId.selectedId, vehicleTypeId: vehicleTypeId.selectedId,
@ -802,6 +802,7 @@ class RequestsVM extends BaseVM {
); );
Utils.hideLoading(context); Utils.hideLoading(context);
if (respModel.messageStatus == 1) { if (respModel.messageStatus == 1) {
log("requestTypeId.selectedId.toRequestTypeEnum(): ${requestTypeId.selectedId.toRequestTypeEnum()}");
Utils.showToast(LocaleKeys.requestSuccessfullyCreated.tr()); Utils.showToast(LocaleKeys.requestSuccessfullyCreated.tr());
Navigator.pop(context); Navigator.pop(context);
await applyFilterOnRequestsVM(requestsTypeEnum: requestTypeId.selectedId.toRequestTypeEnum()); await applyFilterOnRequestsVM(requestsTypeEnum: requestTypeId.selectedId.toRequestTypeEnum());
@ -809,11 +810,11 @@ class RequestsVM extends BaseVM {
} else { } else {
Utils.showToast(respModel.message.toString()); Utils.showToast(respModel.message.toString());
} }
// } catch (e, s) { } catch (e, s) {
// Utils.hideLoading(context); Utils.hideLoading(context);
// log(e.toString()); log(e.toString());
// Utils.showToast(e.toString()); Utils.showToast(e.toString());
// } }
} }
} }

@ -1,5 +1,8 @@
import 'package:flutter/cupertino.dart'; 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/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/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/contact_infos_model.dart';
import 'package:mc_common_app/models/setting_utils_models/faqs_model.dart'; import 'package:mc_common_app/models/setting_utils_models/faqs_model.dart';
@ -74,19 +77,15 @@ class SettingOptionsVM extends BaseVM {
} }
} }
Future<void> appInvitationCreate({required BuildContext context, required int channelId}) async { Future<void> appInvitationCreate({required BuildContext context, required InviteTypeEnum inviteTypeEnum}) async {
ShareResult result = await Utils.shareAppInvitation();
if (result.status != ShareResultStatus.success) {
return;
}
Utils.showLoading(context); Utils.showLoading(context);
try { 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); Utils.hideLoading(context);
} catch (e) { } catch (e) {
logger.i(e.toString()); logger.i(e.toString());
Utils.showToast(e.toString());
Utils.hideLoading(context); Utils.hideLoading(context);
} }
} }

@ -48,8 +48,8 @@ class ShippingManagementVM extends BaseVM {
shippingRequestFilterOptions.clear(); shippingRequestFilterOptions.clear();
shippingRequestStatusesList.clear(); shippingRequestStatusesList.clear();
for (int i = 0; i < shippingStatusEnums.length; i++) { for (int i = 0; i < shippingStatusEnums.length; i++) {
shippingRequestFilterOptions.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].enumValueStr, 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); int index = shippingRequestFilterOptions.indexWhere((element) => element.id == 0);
@ -62,6 +62,7 @@ class ShippingManagementVM extends BaseVM {
} }
Future<void> applyFiltersOnShippingRequests({required ShippingRequestStatusEnum shippingRequestStatusEnum}) async { Future<void> applyFiltersOnShippingRequests({required ShippingRequestStatusEnum shippingRequestStatusEnum}) async {
log("ship: $shippingRequestStatusEnum");
for (var value in shippingRequestFilterOptions) { for (var value in shippingRequestFilterOptions) {
value.isSelected = false; value.isSelected = false;
} }
@ -71,7 +72,8 @@ class ShippingManagementVM extends BaseVM {
notifyListeners(); notifyListeners();
return; 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); await getShippingRequestsListByFilters(shippingStatusEnum: shippingRequestStatusEnum);
notifyListeners(); notifyListeners();
} }

@ -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/extensions/string_extensions.dart';
import 'package:mc_common_app/generated/locale_keys.g.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/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/models/services_models/service_model.dart';
import 'package:mc_common_app/theme/colors.dart'; import 'package:mc_common_app/theme/colors.dart';
import 'package:mc_common_app/utils/enums.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/view_models/appointments_view_model.dart';
import 'package:mc_common_app/views/appointments/widgets/custom_calender_widget.dart'; import 'package:mc_common_app/views/appointments/widgets/custom_calender_widget.dart';
import 'package:mc_common_app/widgets/button/show_fill_button.dart'; import 'package:mc_common_app/widgets/button/show_fill_button.dart';
@ -53,6 +55,7 @@ class BookAppointmentSchedulesView extends StatelessWidget {
return ExpansionTile( return ExpansionTile(
tilePadding: const EdgeInsets.symmetric(horizontal: 21, vertical: 10), tilePadding: const EdgeInsets.symmetric(horizontal: 21, vertical: 10),
childrenPadding: const EdgeInsets.only(left: 16, bottom: 10, right: 16), childrenPadding: const EdgeInsets.only(left: 16, bottom: 10, right: 16),
initiallyExpanded: true,
title: Column( title: Column(
children: [ children: [
Row( Row(
@ -120,6 +123,7 @@ class BookAppointmentSchedulesView extends StatelessWidget {
.customTimeDateSlotList![appointmentsVM.serviceAppointmentScheduleList[scheduleIndex].selectedDateIndex!].availableSlots ?? .customTimeDateSlotList![appointmentsVM.serviceAppointmentScheduleList[scheduleIndex].selectedDateIndex!].availableSlots ??
[], [],
onPressed: (slotIndex) { onPressed: (slotIndex) {
log("slotIndex: $slotIndex");
appointmentsVM.updateSelectedAppointmentSlotByDate(scheduleIndex: scheduleIndex, slotIndex: slotIndex); appointmentsVM.updateSelectedAppointmentSlotByDate(scheduleIndex: scheduleIndex, slotIndex: slotIndex);
}, },
), ),
@ -151,10 +155,26 @@ class BookAppointmentSchedulesView extends StatelessWidget {
if (screenArgumentsForAppointmentDetailPage.routeFlag == 1) { if (screenArgumentsForAppointmentDetailPage.routeFlag == 1) {
appointmentsVM.onReviewButtonPressed(context); appointmentsVM.onReviewButtonPressed(context);
} else { } else {
int selectedSlotId = 0;
int index = 0;
List<TimeSlotModel> 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( appointmentsVM.onRescheduleAppointmentConfirmPressed(
context: context, context: context,
appointmentId: screenArgumentsForAppointmentDetailPage.appointmentId, appointmentId: screenArgumentsForAppointmentDetailPage.appointmentId,
selectedSlotId: appointmentsVM.serviceAppointmentScheduleList.first.selectedCustomTimeDateSlotModel!.date!.slotId, selectedSlotId: selectedSlotId,
); );
} }
}, },

@ -175,20 +175,20 @@ class _ChatViewState extends State<ChatView> {
child: chatMessages.isEmpty child: chatMessages.isEmpty
? Center(child: LocaleKeys.noChatMessage.tr().toText(fontSize: 16, color: MyColors.lightTextColor, textAlign: TextAlign.center)).paddingAll(22) ? Center(child: LocaleKeys.noChatMessage.tr().toText(fontSize: 16, color: MyColors.lightTextColor, textAlign: TextAlign.center)).paddingAll(22)
: ListView.separated( : ListView.separated(
controller: chatVM.scrollController, controller: chatVM.scrollController,
itemCount: chatMessages.length, itemCount: chatMessages.length,
separatorBuilder: (BuildContext context, int index) => 20.height, separatorBuilder: (BuildContext context, int index) => 20.height,
itemBuilder: (BuildContext context, int index) { itemBuilder: (BuildContext context, int index) {
ChatMessageModel chatMessageModel = chatMessages[index]; ChatMessageModel chatMessageModel = chatMessages[index];
return ChatMessageCustomWidget( return ChatMessageCustomWidget(
chatMessageModel: chatMessageModel, chatMessageModel: chatMessageModel,
requestModel: chatTypeEnum == ChatTypeEnum.requestOffer ? chatViewArgumentsForRequest!.requestModel! : null, requestModel: chatTypeEnum == ChatTypeEnum.requestOffer ? chatViewArgumentsForRequest!.requestModel! : null,
requestStatusEnum: requestVM.currentSelectedRequest?.requestStatus, requestStatusEnum: requestVM.currentSelectedRequest?.requestStatus,
chatTypeEnum: chatTypeEnum, chatTypeEnum: chatTypeEnum,
requestsTypeEnum: chatTypeEnum == ChatTypeEnum.requestOffer ? chatViewArgumentsForRequest!.requestModel!.requestType.toRequestTypeEnum() : RequestsTypeEnum.specialCarRequest, requestsTypeEnum: chatTypeEnum == ChatTypeEnum.requestOffer ? chatViewArgumentsForRequest!.requestModel!.requestType.toRequestTypeEnum() : RequestsTypeEnum.specialCarRequest,
); );
}, },
).horPaddingMain(), ).horPaddingMain(),
), ),
10.height, 10.height,
Row( Row(
@ -197,6 +197,7 @@ class _ChatViewState extends State<ChatView> {
if (chatTypeEnum == ChatTypeEnum.requestOffer && if (chatTypeEnum == ChatTypeEnum.requestOffer &&
requestVM.currentSelectedRequest!.requestType.toRequestTypeEnum() == RequestsTypeEnum.serviceRequest && requestVM.currentSelectedRequest!.requestType.toRequestTypeEnum() == RequestsTypeEnum.serviceRequest &&
requestVM.currentSelectedRequest!.requestStatus == RequestStatusEnum.inProgress && requestVM.currentSelectedRequest!.requestStatus == RequestStatusEnum.inProgress &&
requestVM.currentSelectedOffer!.requestOfferStatusEnum == RequestOfferStatusEnum.accepted &&
AppState().currentAppType == AppType.customer) ...[ AppState().currentAppType == AppType.customer) ...[
Expanded( Expanded(
child: ShowFillButton( child: ShowFillButton(
@ -232,90 +233,88 @@ class _ChatViewState extends State<ChatView> {
// ), // ),
// ] // ]
// //
else else ...[
...[ if (AppState().currentAppType == AppType.provider &&
if (AppState().currentAppType == AppType.provider && chatTypeEnum == ChatTypeEnum.requestOffer &&
chatTypeEnum == ChatTypeEnum.requestOffer && requestVM.currentSelectedRequest!.requestStatus == RequestStatusEnum.submitted &&
requestVM.currentSelectedRequest!.requestStatus == RequestStatusEnum.submitted && chatVM.pickedImagesForMessage.isEmpty) ...[
chatVM.pickedImagesForMessage.isEmpty) ...[ Expanded(
Expanded( flex: 1,
flex: 1, child: const Icon(
child: const Icon( Icons.local_offer_rounded,
Icons.local_offer_rounded, color: MyColors.darkPrimaryColor,
color: MyColors.darkPrimaryColor, size: 30,
size: 30, ).onPress(
).onPress( () {
() { requestVM.resetSendOfferBottomSheet();
requestVM.resetSendOfferBottomSheet(); RequestDetailPageArguments requestDetailArguments = RequestDetailPageArguments(
RequestDetailPageArguments requestDetailArguments = RequestDetailPageArguments( requestIndex: chatViewArgumentsForRequest!.requestIndex,
requestIndex: chatViewArgumentsForRequest!.requestIndex, requestModel: chatViewArgumentsForRequest!.requestModel!,
requestModel: chatViewArgumentsForRequest!.requestModel!, );
); buildSendOfferBottomSheet(
buildSendOfferBottomSheet( context: context,
context: context, requestDetailPageArguments: requestDetailArguments,
requestDetailPageArguments: requestDetailArguments, isFromChatScreen: true,
isFromChatScreen: true, offerId: null, // null means creating new offer
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 (chatTypeEnum == ChatTypeEnum.requestOffer) ...[ ],
Expanded( if (chatVM.pickedImagesForMessage.isNotEmpty) ...[
flex: 1, Expanded(
child: const Icon( flex: 8,
Icons.photo_library_rounded, child: PickedFilesContainer(
color: MyColors.darkPrimaryColor, pickedFiles: chatVM.pickedImagesForMessage,
size: 30, onCrossPressedPrimary: chatVM.removeImageFromList,
).onPress(() => chatVM.pickMultipleImages()), onAddFilePressed: () => 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),
),
), ),
], ),
] else if (chatTypeEnum == ChatTypeEnum.requestOffer) ...[
Expanded( Expanded(
flex: 1, flex: 1,
child: const Icon(Icons.send_rounded, color: MyColors.darkPrimaryColor, size: 30).onPress( child: const Icon(
() async { Icons.photo_library_rounded,
ChatMessageTypeEnum chatMessageTypeEnum = ChatMessageTypeEnum.freeText; 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) { if (chatVM.pickedImagesForMessage.isNotEmpty) {
chatMessageTypeEnum = ChatMessageTypeEnum.image; chatMessageTypeEnum = ChatMessageTypeEnum.image;
} }
final status = await onMessageSend(chatMessageType: chatMessageTypeEnum); final status = await onMessageSend(chatMessageType: chatMessageTypeEnum);
if (status) { if (status) {
chatVM.scrollChatDown(); chatVM.scrollChatDown();
if (chatMessageTypeEnum == ChatMessageTypeEnum.freeText) { if (chatMessageTypeEnum == ChatMessageTypeEnum.freeText) {
chatVM.clearChatMessageText(); chatVM.clearChatMessageText();
} else if (chatMessageTypeEnum == ChatMessageTypeEnum.image) { } else if (chatMessageTypeEnum == ChatMessageTypeEnum.image) {
chatVM.clearPickedImagesForMessage(); chatVM.clearPickedImagesForMessage();
}
} }
}, }
), },
), ),
], ),
],
], ],
).toContainer(isShadowEnabled: true) ).toContainer(isShadowEnabled: true)
], ],

@ -40,7 +40,7 @@ class SettingOptionsInviteFriends extends StatelessWidget {
needBorderBelow: true, needBorderBelow: true,
showTrailingArrow: false, showTrailingArrow: false,
onTap: () async { onTap: () async {
await context.read<SettingOptionsVM>().appInvitationCreate(context: context, channelId: 1); await context.read<SettingOptionsVM>().appInvitationCreate(context: context, inviteTypeEnum: InviteTypeEnum.whatsapp);
}, },
), ),
CustomSettingOptionsTile( CustomSettingOptionsTile(
@ -53,7 +53,7 @@ class SettingOptionsInviteFriends extends StatelessWidget {
needBorderBelow: true, needBorderBelow: true,
showTrailingArrow: false, showTrailingArrow: false,
onTap: () async { onTap: () async {
await context.read<SettingOptionsVM>().appInvitationCreate(context: context, channelId: 2); await context.read<SettingOptionsVM>().appInvitationCreate(context: context, inviteTypeEnum: InviteTypeEnum.sms);
}), }),
CustomSettingOptionsTile( CustomSettingOptionsTile(
leadingWidget: const Icon( leadingWidget: const Icon(
@ -65,7 +65,7 @@ class SettingOptionsInviteFriends extends StatelessWidget {
needBorderBelow: false, needBorderBelow: false,
showTrailingArrow: false, showTrailingArrow: false,
onTap: () async { onTap: () async {
await context.read<SettingOptionsVM>().appInvitationCreate(context: context, channelId: 3); await context.read<SettingOptionsVM>().appInvitationCreate(context: context, inviteTypeEnum: InviteTypeEnum.email);
}, },
), ),
30.height, 30.height,

@ -32,7 +32,7 @@ class DropdownField extends StatefulWidget {
final TextStyle? textStyle; final TextStyle? textStyle;
final bool isSelectAble; 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 @override
State<DropdownField> createState() => _DropdownFieldState(); State<DropdownField> createState() => _DropdownFieldState();

Loading…
Cancel
Save