|
|
|
|
@ -23,7 +23,6 @@ import 'package:mc_common_app/widgets/extensions/extensions_widget.dart';
|
|
|
|
|
import 'package:mc_common_app/widgets/txt_field.dart';
|
|
|
|
|
import 'package:provider/provider.dart';
|
|
|
|
|
import 'package:easy_localization/easy_localization.dart' as lcl;
|
|
|
|
|
import 'package:sizer/sizer.dart';
|
|
|
|
|
|
|
|
|
|
class ChatMessageCustomWidget extends StatefulWidget {
|
|
|
|
|
final ChatMessageModel chatMessageModel;
|
|
|
|
|
@ -59,13 +58,26 @@ class _ChatMessageCustomWidgetState extends State<ChatMessageCustomWidget> {
|
|
|
|
|
shrinkWrap: true,
|
|
|
|
|
itemCount: chatVM.offerRejectModelList.length,
|
|
|
|
|
separatorBuilder: (BuildContext context, int index) {
|
|
|
|
|
if (chatVM.offerRejectModelList[index].index == 3 && requestOfferStatusEnum == RequestOfferStatusEnum.rejected) {
|
|
|
|
|
if ((chatVM.offerRejectModelList[index].index == 1 || chatVM.offerRejectModelList[index].index == 2 || chatVM.offerRejectModelList[index].index == 3) && requestOfferStatusEnum == RequestOfferStatusEnum.cancel) {
|
|
|
|
|
return const SizedBox();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// 0 -> itemNoLongerAvailable
|
|
|
|
|
// 1 -> customerNotResponding
|
|
|
|
|
if ((chatVM.offerRejectModelList[index].index == 4 || chatVM.offerRejectModelList[index].index == 0) && requestOfferStatusEnum == RequestOfferStatusEnum.rejected) {
|
|
|
|
|
return const SizedBox();
|
|
|
|
|
}
|
|
|
|
|
return const Divider(thickness: 0.5);
|
|
|
|
|
},
|
|
|
|
|
itemBuilder: (BuildContext context, int index) {
|
|
|
|
|
if (chatVM.offerRejectModelList[index].index == 3 && requestOfferStatusEnum == RequestOfferStatusEnum.rejected) {
|
|
|
|
|
if ((chatVM.offerRejectModelList[index].index == 1 || chatVM.offerRejectModelList[index].index == 2 || chatVM.offerRejectModelList[index].index == 3) && requestOfferStatusEnum == RequestOfferStatusEnum.cancel) {
|
|
|
|
|
return const SizedBox();
|
|
|
|
|
}
|
|
|
|
|
// 0 -> itemNoLongerAvailable
|
|
|
|
|
// 1 -> customerNotResponding
|
|
|
|
|
// 2 -> veryHighPrice
|
|
|
|
|
// 3 -> alreadySold
|
|
|
|
|
if ((chatVM.offerRejectModelList[index].index == 4 || chatVM.offerRejectModelList[index].index == 0) && requestOfferStatusEnum == RequestOfferStatusEnum.rejected) {
|
|
|
|
|
return const SizedBox();
|
|
|
|
|
}
|
|
|
|
|
OfferRequestCommentModel offerRequestCommentModel = chatVM.offerRejectModelList[index];
|
|
|
|
|
@ -108,7 +120,6 @@ class _ChatMessageCustomWidgetState extends State<ChatMessageCustomWidget> {
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
Navigator.pop(context);
|
|
|
|
|
|
|
|
|
|
bool status = await chatVM.onSendMessageForActionOnRequestOffer(
|
|
|
|
|
receiverId: (chatMessageModel.isMyMessage ?? false) ? chatMessageModel.receiverUserID ?? "" : chatMessageModel.senderUserID ?? "",
|
|
|
|
|
chatMessageType: ChatMessageTypeEnum.offer,
|
|
|
|
|
@ -202,6 +213,31 @@ class _ChatMessageCustomWidgetState extends State<ChatMessageCustomWidget> {
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
Widget buildImagesInOffer(List<MessageImageModel> offerImages, bool isMyMessage) {
|
|
|
|
|
int imageCount = offerImages.length;
|
|
|
|
|
return SizedBox(
|
|
|
|
|
height: 50,
|
|
|
|
|
child: ListView.builder(
|
|
|
|
|
scrollDirection: Axis.horizontal,
|
|
|
|
|
itemCount: imageCount,
|
|
|
|
|
itemBuilder: (BuildContext context, int index) {
|
|
|
|
|
Widget widget = const SizedBox();
|
|
|
|
|
if ((offerImages[index].isFromNetwork ?? false)) {
|
|
|
|
|
widget = offerImages[index].imageUrl.buildNetworkImage(fit: BoxFit.cover, width: 50);
|
|
|
|
|
} else {
|
|
|
|
|
widget = offerImages[index].imagePath.buildFileImage(fit: BoxFit.cover, width: 50);
|
|
|
|
|
}
|
|
|
|
|
return Container(
|
|
|
|
|
decoration: BoxDecoration(
|
|
|
|
|
borderRadius: BorderRadius.circular(5), // Optional: Rounded corners
|
|
|
|
|
),
|
|
|
|
|
child: ClipRRect(borderRadius: BorderRadius.circular(5), child: widget))
|
|
|
|
|
.paddingOnly(left: isMyMessage ? 10 : 0, right: isMyMessage ? 0 : 10)
|
|
|
|
|
.onPress(() => navigateWithName(context, AppRoutes.mediaViewerScreen, arguments: offerImages));
|
|
|
|
|
}),
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
Widget buildOfferDetailsInChatMessage({required RequestStatusEnum requestStatusEnum, required ChatMessageModel chatMessageModel, required BuildContext context}) {
|
|
|
|
|
final requestOfferStatusEnum = chatMessageModel.reqOffer!.requestOfferStatusEnum ?? RequestOfferStatusEnum.offer;
|
|
|
|
|
if (requestStatusEnum != RequestStatusEnum.submitted && requestOfferStatusEnum != RequestOfferStatusEnum.accepted) {
|
|
|
|
|
@ -406,16 +442,14 @@ class _ChatMessageCustomWidgetState extends State<ChatMessageCustomWidget> {
|
|
|
|
|
fadeInDuration: const Duration(milliseconds: 1000),
|
|
|
|
|
useOldImageOnUrlChange: false);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return widget.toCircle(borderRadius: 100);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
Widget buildFreeTextDetailsInMessage({required ChatMessageTypeEnum chatMessageTypeEnum}) {
|
|
|
|
|
log(": ${widget.chatMessageModel.isMyMessage}");
|
|
|
|
|
return Row(
|
|
|
|
|
crossAxisAlignment: CrossAxisAlignment.start,
|
|
|
|
|
children: [
|
|
|
|
|
if (chatMessageTypeEnum == ChatMessageTypeEnum.offer && (widget.chatMessageModel.isMyMessage == true)) ...[
|
|
|
|
|
if (chatMessageTypeEnum == ChatMessageTypeEnum.offer && (widget.chatMessageModel.isMyMessage == true) && widget.chatMessageModel.isRead == true) ...[
|
|
|
|
|
Row(
|
|
|
|
|
children: [
|
|
|
|
|
const Icon(Icons.remove_red_eye_outlined, size: 12, color: MyColors.lightTextColor),
|
|
|
|
|
@ -434,7 +468,6 @@ class _ChatMessageCustomWidgetState extends State<ChatMessageCustomWidget> {
|
|
|
|
|
),
|
|
|
|
|
),
|
|
|
|
|
),
|
|
|
|
|
|
|
|
|
|
],
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
@ -515,7 +548,13 @@ class _ChatMessageCustomWidgetState extends State<ChatMessageCustomWidget> {
|
|
|
|
|
),
|
|
|
|
|
child: ClipRRect(
|
|
|
|
|
borderRadius: BorderRadius.circular(8), // Apply same radius to image
|
|
|
|
|
child: messagesImages[index].imageUrl.buildNetworkImage(
|
|
|
|
|
child: (messagesImages[index].isFromNetwork ?? false)
|
|
|
|
|
? messagesImages[index].imageUrl.buildNetworkImage(
|
|
|
|
|
fit: BoxFit.cover,
|
|
|
|
|
width: gridItemSize,
|
|
|
|
|
height: gridItemSize,
|
|
|
|
|
)
|
|
|
|
|
: messagesImages[index].imagePath.buildFileImage(
|
|
|
|
|
fit: BoxFit.cover,
|
|
|
|
|
width: gridItemSize,
|
|
|
|
|
height: gridItemSize,
|
|
|
|
|
@ -549,6 +588,10 @@ class _ChatMessageCustomWidgetState extends State<ChatMessageCustomWidget> {
|
|
|
|
|
messageTypeWidget = Column(
|
|
|
|
|
children: [
|
|
|
|
|
buildFreeTextDetailsInMessage(chatMessageTypeEnum: chatMessageTypeEnum),
|
|
|
|
|
if (widget.chatMessageModel.reqOffer!.reqOfferImages != null && widget.chatMessageModel.reqOffer!.reqOfferImages!.isNotEmpty) ...[
|
|
|
|
|
5.height,
|
|
|
|
|
buildImagesInOffer(widget.chatMessageModel.reqOffer!.reqOfferImages!, widget.chatMessageModel.isMyMessage ?? false),
|
|
|
|
|
],
|
|
|
|
|
10.height,
|
|
|
|
|
buildOfferDetailsInChatMessage(requestStatusEnum: widget.requestStatusEnum!, chatMessageModel: widget.chatMessageModel, context: context),
|
|
|
|
|
],
|
|
|
|
|
|