|
|
|
|
@ -1,3 +1,5 @@
|
|
|
|
|
import 'dart:developer';
|
|
|
|
|
|
|
|
|
|
import 'package:cached_network_image/cached_network_image.dart';
|
|
|
|
|
import 'package:easy_localization/easy_localization.dart' as lcl;
|
|
|
|
|
import 'package:flutter/material.dart';
|
|
|
|
|
@ -31,14 +33,14 @@ class ChatMessageCustomWidget extends StatefulWidget {
|
|
|
|
|
final RequestStatusEnum? requestStatusEnum;
|
|
|
|
|
final ChatTypeEnum chatTypeEnum;
|
|
|
|
|
final RequestsTypeEnum requestsTypeEnum;
|
|
|
|
|
final RequestModel requestModel;
|
|
|
|
|
final RequestModel? requestModel;
|
|
|
|
|
|
|
|
|
|
const ChatMessageCustomWidget({
|
|
|
|
|
super.key,
|
|
|
|
|
required this.chatMessageModel,
|
|
|
|
|
required this.requestStatusEnum,
|
|
|
|
|
required this.chatTypeEnum,
|
|
|
|
|
required this.requestModel,
|
|
|
|
|
this.requestModel,
|
|
|
|
|
this.requestsTypeEnum = RequestsTypeEnum.specialCarRequest,
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
@ -158,12 +160,12 @@ class _ChatMessageCustomWidgetState extends State<ChatMessageCustomWidget> {
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
Future buildDealBottomSheetOptionsForSpecialCar({required ChatMessageModel chatMessageModel, required RequestOfferStatusEnum requestOfferStatusEnum}) {
|
|
|
|
|
Future buildDealBottomSheetOptionsForSpecialCar({required ChatMessageModel chatMessageModel, required RequestOfferStatusEnum requestOfferStatusEnum, required bool fromCancelOffer}) {
|
|
|
|
|
return showModalBottomSheet(
|
|
|
|
|
context: context,
|
|
|
|
|
isScrollControlled: true,
|
|
|
|
|
enableDrag: true,
|
|
|
|
|
builder: (BuildContext context) {
|
|
|
|
|
builder: (BuildContext sheetContext) {
|
|
|
|
|
return Consumer(builder: (BuildContext context, ChatVM chatVM, Widget? child) {
|
|
|
|
|
return InfoBottomSheet(
|
|
|
|
|
title: LocaleKeys.pleaseSpecify.tr().toText(fontSize: 28, isBold: true, letterSpacing: -1.44),
|
|
|
|
|
@ -198,15 +200,62 @@ class _ChatMessageCustomWidgetState extends State<ChatMessageCustomWidget> {
|
|
|
|
|
ShowFillButton(
|
|
|
|
|
title: LocaleKeys.continu.tr(),
|
|
|
|
|
onPressed: () async {
|
|
|
|
|
pop(sheetContext);
|
|
|
|
|
if (chatVM.dealOptionsModelList[0].isSelected ?? false) {
|
|
|
|
|
final requestVM = context.read<RequestsVM>();
|
|
|
|
|
return dealCompletedConfirmationBottomSheet(
|
|
|
|
|
mainContext: context,
|
|
|
|
|
requestStatusEnum: RequestStatusEnum.completed,
|
|
|
|
|
requestId: requestVM.currentSelectedRequest!.id,
|
|
|
|
|
);
|
|
|
|
|
if (fromCancelOffer) {
|
|
|
|
|
final requestVM = context.read<RequestsVM>();
|
|
|
|
|
return dealCompletedConsentBottomSheet(
|
|
|
|
|
mainContext: context,
|
|
|
|
|
requestStatusEnum: RequestStatusEnum.completed,
|
|
|
|
|
requestId: requestVM.currentSelectedRequest!.id,
|
|
|
|
|
);
|
|
|
|
|
} else {
|
|
|
|
|
final requestVM = context.read<RequestsVM>();
|
|
|
|
|
return dealCompletedConsentBottomSheet(
|
|
|
|
|
mainContext: context,
|
|
|
|
|
requestStatusEnum: RequestStatusEnum.completed,
|
|
|
|
|
requestId: requestVM.currentSelectedRequest!.id,
|
|
|
|
|
acceptRequestOffer: () async {
|
|
|
|
|
bool status = await chatVM.onSendMessageForActionOnRequestOffer(
|
|
|
|
|
receiverId: chatMessageModel.senderUserID ?? "",
|
|
|
|
|
chatMessageType: ChatMessageTypeEnum.offer,
|
|
|
|
|
comments: GlobalConsts.acceptingThisOffer,
|
|
|
|
|
requestId: chatMessageModel.reqOffer!.requestID ?? -1,
|
|
|
|
|
serviceProviderID: chatMessageModel.serviceProviderID ?? 0,
|
|
|
|
|
requestOfferID: chatMessageModel.reqOffer!.id ?? -1,
|
|
|
|
|
offerPrice: chatMessageModel.reqOffer!.price.toString(),
|
|
|
|
|
serviceItemName: chatMessageModel.reqOffer!.serviceItemName ?? "",
|
|
|
|
|
manufacturedOn: chatMessageModel.reqOffer!.manufacturedOn ?? "",
|
|
|
|
|
manufacturedById: chatMessageModel.reqOffer!.manufacturedById ?? 0,
|
|
|
|
|
requestOfferStatusEnum: RequestOfferStatusEnum.accepted,
|
|
|
|
|
context: context,
|
|
|
|
|
);
|
|
|
|
|
|
|
|
|
|
if (status) {
|
|
|
|
|
chatMessageModel.reqOffer!.requestOfferStatusEnum = RequestOfferStatusEnum.accepted;
|
|
|
|
|
requestVM.currentSelectedRequest!.requestStatus = RequestStatusEnum.inProgress;
|
|
|
|
|
requestVM.updateAcceptedReqOffer(chatMessageModel.reqOffer!);
|
|
|
|
|
requestVM.updateAcceptedRequestOfferProviderName(chatMessageModel.senderName ?? "");
|
|
|
|
|
int index = chatVM.serviceProviderOffersList.indexWhere(
|
|
|
|
|
(element) => (element.providerId == requestVM.currentSelectedOffer!.providerId) && (element.requestId == requestVM.currentSelectedOffer!.requestId));
|
|
|
|
|
|
|
|
|
|
if (index != -1) {
|
|
|
|
|
chatVM.serviceProviderOffersList[index].requestOfferStatusEnum = chatMessageModel.reqOffer!.requestOfferStatusEnum;
|
|
|
|
|
}
|
|
|
|
|
setState(() {});
|
|
|
|
|
Utils.showToast(LocaleKeys.offerAccepted.tr());
|
|
|
|
|
return true;
|
|
|
|
|
} else {
|
|
|
|
|
return false;
|
|
|
|
|
}
|
|
|
|
|
});
|
|
|
|
|
}
|
|
|
|
|
} else {
|
|
|
|
|
buildDealNotCompletedBottomSheetOptions(chatMessageModel: chatMessageModel);
|
|
|
|
|
if (fromCancelOffer) {
|
|
|
|
|
buildRejectOrCancelOfferBottomSheet(chatMessageModel: chatMessageModel, requestOfferStatusEnum: RequestOfferStatusEnum.cancel);
|
|
|
|
|
} else {
|
|
|
|
|
buildDealNotCompletedBottomSheetOptions(chatMessageModel: chatMessageModel);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
},
|
|
|
|
|
maxWidth: double.infinity,
|
|
|
|
|
@ -399,7 +448,7 @@ class _ChatMessageCustomWidgetState extends State<ChatMessageCustomWidget> {
|
|
|
|
|
}
|
|
|
|
|
setState(() {});
|
|
|
|
|
// Navigator.pop(context);
|
|
|
|
|
Utils.showToast("Offer Accepted");
|
|
|
|
|
Utils.showToast(LocaleKeys.offerAccepted.tr());
|
|
|
|
|
// navigateReplaceWithName(context, AppRoutes.dashboard);
|
|
|
|
|
}
|
|
|
|
|
},
|
|
|
|
|
@ -499,7 +548,7 @@ class _ChatMessageCustomWidgetState extends State<ChatMessageCustomWidget> {
|
|
|
|
|
isFilled: false,
|
|
|
|
|
onPressed: () {
|
|
|
|
|
if (widget.requestsTypeEnum == RequestsTypeEnum.specialCarRequest) {
|
|
|
|
|
buildDealBottomSheetOptionsForSpecialCar(chatMessageModel: chatMessageModel, requestOfferStatusEnum: requestOfferStatusEnum);
|
|
|
|
|
buildDealBottomSheetOptionsForSpecialCar(chatMessageModel: chatMessageModel, requestOfferStatusEnum: requestOfferStatusEnum, fromCancelOffer: false);
|
|
|
|
|
} else {
|
|
|
|
|
offerAcceptConfirmationBottomSheet(chatMessageModel: chatMessageModel);
|
|
|
|
|
}
|
|
|
|
|
@ -529,6 +578,23 @@ class _ChatMessageCustomWidgetState extends State<ChatMessageCustomWidget> {
|
|
|
|
|
10.height,
|
|
|
|
|
Row(
|
|
|
|
|
children: [
|
|
|
|
|
if (widget.requestsTypeEnum == RequestsTypeEnum.specialCarRequest) ...[
|
|
|
|
|
Expanded(
|
|
|
|
|
child: ShowFillButton(
|
|
|
|
|
maxHeight: 27,
|
|
|
|
|
title: LocaleKeys.more.tr(),
|
|
|
|
|
fontSize: 9,
|
|
|
|
|
borderColor: MyColors.lightTextColor,
|
|
|
|
|
isFilled: false,
|
|
|
|
|
onPressed: () {
|
|
|
|
|
buildDealBottomSheetOptionsForSpecialCar(chatMessageModel: chatMessageModel, requestOfferStatusEnum: requestOfferStatusEnum, fromCancelOffer: true);
|
|
|
|
|
},
|
|
|
|
|
backgroundColor: MyColors.white,
|
|
|
|
|
txtColor: MyColors.lightTextColor,
|
|
|
|
|
),
|
|
|
|
|
),
|
|
|
|
|
20.width,
|
|
|
|
|
],
|
|
|
|
|
Expanded(
|
|
|
|
|
child: ShowFillButton(
|
|
|
|
|
maxHeight: 27,
|
|
|
|
|
@ -660,10 +726,10 @@ class _ChatMessageCustomWidgetState extends State<ChatMessageCustomWidget> {
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
Future<void> onOfferEditIconPressed() async {
|
|
|
|
|
int index = context.read<RequestsVM>().myFilteredRequests.indexWhere((request) => request.id == widget.requestModel.id);
|
|
|
|
|
int index = context.read<RequestsVM>().myFilteredRequests.indexWhere((request) => request.id == widget.requestModel!.id);
|
|
|
|
|
RequestDetailPageArguments requestDetailArguments = RequestDetailPageArguments(
|
|
|
|
|
requestIndex: index, // Not getting used in case of update offer
|
|
|
|
|
requestModel: widget.requestModel,
|
|
|
|
|
requestModel: widget.requestModel!,
|
|
|
|
|
);
|
|
|
|
|
RequestsVM requestVM = context.read<RequestsVM>();
|
|
|
|
|
requestVM.resetSendOfferBottomSheet();
|
|
|
|
|
@ -676,8 +742,13 @@ class _ChatMessageCustomWidgetState extends State<ChatMessageCustomWidget> {
|
|
|
|
|
requestVM.updateIsDeliveryAvailableStatus((offer.isDeliveryAvailable ?? false));
|
|
|
|
|
if (offer.reqOfferImages != null && offer.reqOfferImages!.isNotEmpty) {
|
|
|
|
|
for (var element in offer.reqOfferImages!) {
|
|
|
|
|
if (element.imageUrl != null) {
|
|
|
|
|
ImageModel imageModel = ImageModel(id: element.id, filePath: element.imageUrl, isFromNetwork: true);
|
|
|
|
|
log("element: ${element.imageStr != null && element.imageStr!.isNotEmpty}");
|
|
|
|
|
|
|
|
|
|
if (element.imageUrl != null || element.imageStr != null) {
|
|
|
|
|
ImageModel imageModel = ImageModel(
|
|
|
|
|
id: element.id,
|
|
|
|
|
filePath: element.imageStr != null && element.imageStr!.isNotEmpty ? element.imageStr : element.imageUrl,
|
|
|
|
|
isFromNetwork: element.imageStr != null && element.imageStr!.isNotEmpty ? false : true);
|
|
|
|
|
requestVM.addImageToPickedVehicleImages(imageModel);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
@ -697,7 +768,10 @@ class _ChatMessageCustomWidgetState extends State<ChatMessageCustomWidget> {
|
|
|
|
|
LocaleKeys.viewed.tr().toText(fontSize: 10, color: MyColors.lightTextColor, fontWeight: MyFonts.Medium),
|
|
|
|
|
],
|
|
|
|
|
),
|
|
|
|
|
] else if (AppState().currentAppType == AppType.provider && chatMessageTypeEnum == ChatMessageTypeEnum.offer && (widget.chatMessageModel.isMyMessage == true)) ...[
|
|
|
|
|
] else if (AppState().currentAppType == AppType.provider &&
|
|
|
|
|
widget.chatMessageModel.reqOffer!.requestOfferStatusEnum == RequestOfferStatusEnum.offer &&
|
|
|
|
|
chatMessageTypeEnum == ChatMessageTypeEnum.offer &&
|
|
|
|
|
(widget.chatMessageModel.isMyMessage == true)) ...[
|
|
|
|
|
MyAssets.icEdit.buildSvg(color: MyColors.white, height: 15).onPress(() => onOfferEditIconPressed()),
|
|
|
|
|
],
|
|
|
|
|
Expanded(
|
|
|
|
|
@ -889,7 +963,10 @@ class _ChatMessageCustomWidgetState extends State<ChatMessageCustomWidget> {
|
|
|
|
|
mainAxisAlignment: MainAxisAlignment.spaceBetween,
|
|
|
|
|
crossAxisAlignment: CrossAxisAlignment.start,
|
|
|
|
|
children: [
|
|
|
|
|
((widget.chatMessageModel.isMyMessage ?? false) ? "You" : widget.chatMessageModel.senderName ?? "").toText(fontSize: 16, isBold: true),
|
|
|
|
|
((widget.chatMessageModel.isMyMessage ?? false) ? LocaleKeys.you.tr() : widget.chatMessageModel.senderName ?? "").toText(
|
|
|
|
|
fontSize: 16,
|
|
|
|
|
isBold: true,
|
|
|
|
|
),
|
|
|
|
|
],
|
|
|
|
|
),
|
|
|
|
|
5.height,
|
|
|
|
|
|