05 March,2025

aamir_dev
Faiz Hashmi 8 months ago
parent 59875f5198
commit 113f158079

@ -179,6 +179,7 @@ class ApiConsts {
static String requestOffersSpsGet = "${baseUrlServices}api/RequestManagement/Request_OfferSPs_Get";
static String getServiceRequestsForProvider = "${baseUrlServices}api/RequestManagement/Request_ServiceProvider";
//Shipping
static String shippingRequestStatusUpdate = "${baseUrlServices}api/RequestManagement/ShippingRequestStatus_Update";
static String shippingRequestStatusGet = "${baseUrlServices}api/RequestManagement/ShippingRequestStatus_Get";
@ -192,7 +193,7 @@ class ApiConsts {
static String getChatMessagesForRequests = "${baseUrlServices}api/RequestManagement/ReqOfferChat_Get";
static String getChatMessagesForAds = "${baseUrlServices}api/Advertisement/AdsChat_Get";
static String getChatBuyersForAds = "${baseUrlServices}api/Advertisement/AdsChatBuyer_Get";
static String reqChatUnreadGet = "${baseUrlServices}api/RequestManagement/Req_ChatUnread_Get";
static String reqChatUnreadGet = "${baseUrlServices}api/RequestManagement/Req_ChatCount_Get";
//Settings Options
static String getAllFAQs = "${baseUrlServices}api/Common/FAQ_Get";

@ -9,24 +9,28 @@ class OffersUnreadChatModel {
factory OffersUnreadChatModel.fromJson(Map<String, dynamic> json) {
return OffersUnreadChatModel(
reqTotal: json['reqTotal'],
reqChatUnread: (json['reqChatUnread'] as List).map((e) => OffersUnreadChatDataModel.fromJson(e)).toList(),
reqTotal: json['total'],
reqChatUnread: (json['reqChatCountData'] as List).map((e) => OffersUnreadChatDataModel.fromJson(e)).toList(),
);
}
}
class OffersUnreadChatDataModel {
final String senderUserID;
final int unreadMessagesCount;
final int requestId;
final String lastChatTime;
final String lastChatText;
final String customerName;
String reqTitle;
int reqTotal;
int requestID;
String senderUserID;
int unreadMessagesCount;
String lastChatTime;
String lastChatText;
String customerName;
OffersUnreadChatDataModel({
required this.reqTitle,
required this.reqTotal,
required this.requestID,
required this.senderUserID,
required this.unreadMessagesCount,
required this.requestId,
required this.lastChatTime,
required this.lastChatText,
required this.customerName,
@ -34,12 +38,23 @@ class OffersUnreadChatDataModel {
factory OffersUnreadChatDataModel.fromJson(Map<String, dynamic> json) {
return OffersUnreadChatDataModel(
reqTitle: json['reqTitle'],
reqTotal: json['reqTotal'],
requestID: json['requestID'],
senderUserID: json['senderUserID'],
unreadMessagesCount: json['unreadMessagesCount'],
requestId: json['requestId'] ?? 0,
lastChatTime: json['lastChatTime'],
lastChatText: json['lastChatText'],
customerName: json['customerName'],
);
}
}
// "reqTitle": "Spare_Parts / Ford / Edge / 2016",
// I/flutter (16941): "reqTotal": 1,
// I/flutter (16941): "requestID": 145,
// I/flutter (16941): "senderUserID": "b56bc6bd-e45c-4644-b7c4-08dd02460895",
// I/flutter (16941): "unreadMessagesCount": 0,
// I/flutter (16941): "lastChatTime": "2025-02-12T10:33:42.1433333",
// I/flutter (16941): "lastChatText": "I am accepting this offer.",
// I/flutter (16941): "customerName": "Faiz 100"

@ -67,6 +67,8 @@ class ServiceProvidersOffers {
int? offerCount;
int? requestId;
String? providerAddress;
String? providerLatitude;
String? providerLongitude;
List<ChatMessageModel>? chatMessages;
ServiceProvidersOffers({
@ -82,6 +84,8 @@ class ServiceProvidersOffers {
this.createdOn,
this.requestOfferStatusEnum,
this.providerAddress,
this.providerLatitude,
this.providerLongitude,
});
ServiceProvidersOffers.fromJson(Map<String, dynamic> json, int? reqId) {
@ -95,7 +99,9 @@ class ServiceProvidersOffers {
requestId = reqId;
createdOn = json['createdOn'];
requestOfferStatusEnum = ((json['offerStatusLast']) as int).toRequestOfferStatusEnum();
providerAddress = "Will be in API in case of self pickup";
providerAddress = json['address'] ?? "";
providerLatitude = json['latititude'] ?? "0.0";
providerLongitude = json['langitude'] ?? "0.0";
chatMessages = [];
}

@ -86,6 +86,27 @@ class RequestsVM extends BaseVM {
notifyListeners();
}
RequestDeliveryOptionEnum? selectedDeliveryOptionEnum;
void updateSelectedDeliveryOptionEnum(RequestDeliveryOptionEnum value) {
for (var value in deliveryOptionsForReviewRequest) {
value.isSelected = false;
}
int index = deliveryOptionsForReviewRequest.indexWhere((element) => element.id.toRequestDeliveryOptionEnum() == value);
deliveryOptionsForReviewRequest[index].isSelected = true;
selectedDeliveryOptionEnum = value;
selectedDeliveryOptionEnumError = "";
notifyListeners();
}
String selectedDeliveryOptionEnumError = "";
void updateSelectedDeliveryOptionEnumError(var value) {
selectedDeliveryOptionEnumError = value;
notifyListeners();
}
Future<void> getRequests({bool isNeedToRebuild = false}) async {
if (isNeedToRebuild) setState(ViewState.busy);
applyFilterOnRequestsVM(requestsTypeEnum: RequestsTypeEnum.specialCarRequest);
@ -949,6 +970,14 @@ class RequestsVM extends BaseVM {
}
}
List<FilterListModel> deliveryOptionsForReviewRequest = [];
void populateRequestDeliveryOptions() {
deliveryOptionsForReviewRequest.clear();
deliveryOptionsForReviewRequest.addAll(myDeliveryOptionsFilterOptions.where((element) => element.id != RequestDeliveryOptionEnum.both.getIdRequestDeliveryOptionEnum()).toList());
notifyListeners();
}
Future<void> applyFilterOnDeliveryOption({required RequestDeliveryOptionEnum requestDeliveryOptionEnum}) async {
if (myDeliveryOptionsFilterOptions.isEmpty) return;
for (var value in myDeliveryOptionsFilterOptions) {

@ -63,6 +63,8 @@ class _ProvidersChatListPageState extends State<ProvidersChatListPage> {
requestIndex = requestsVM.myFilteredRequests.indexWhere((request) => request.id == requestID);
}
log("requestIndex2: $requestIndex");
if (requestIndex != -1) {
RequestModel request = requestsVM.myFilteredRequests[requestIndex];
requestsVM.updateCurrentSelectedRequest(request);
@ -86,8 +88,6 @@ class _ProvidersChatListPageState extends State<ProvidersChatListPage> {
chatViewArgumentsForRequest: chatViewArgumentsForRequest,
);
log("requestIndex2: $requestIndex");
await chatVM
.getRequestsChatMessagesForProvider(
customerId: requestDetailPageArguments.requestModel.customerId,
@ -178,7 +178,10 @@ class _ProvidersChatListPageState extends State<ProvidersChatListPage> {
],
),
],
).onPress(() async => await onChatTapped(context: context, requestID: offersUnreadChatDataModel.requestId ?? 0)).toContainer(isShadowEnabled: true);
).onPress(() async {
requestsVM.offersUnreadChatModel!.reqChatUnread[index].unreadMessagesCount = 0;
await onChatTapped(context: context, requestID: offersUnreadChatDataModel.requestID ?? 0);
}).toContainer(isShadowEnabled: true);
},
separatorBuilder: (context, index) => 16.height,
),

@ -1,3 +1,6 @@
import 'dart:async';
import 'dart:developer';
import 'package:easy_localization/easy_localization.dart';
import 'package:flutter/material.dart';
import 'package:mc_common_app/classes/app_state.dart';
@ -9,17 +12,15 @@ import 'package:mc_common_app/generated/locale_keys.g.dart';
import 'package:mc_common_app/models/user_models/user.dart';
import 'package:mc_common_app/theme/colors.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/enums.dart';
import 'package:mc_common_app/utils/navigator.dart';
import 'package:mc_common_app/utils/utils.dart';
import 'package:mc_common_app/view_models/chat_view_model.dart';
import 'package:mc_common_app/view_models/requests_view_model.dart';
import 'package:mc_common_app/views/advertisement/ad_creation_steps/ad_review_containers.dart';
import 'package:mc_common_app/views/location_views/pick_location_page.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/filters_list.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:mc_common_app/widgets/txt_field.dart';
@ -36,6 +37,9 @@ class _ReviewRequestOfferState extends State<ReviewRequestOffer> {
@override
void initState() {
final requestVM = context.read<RequestsVM>();
if (requestVM.acceptedRequestOffer != null && requestVM.acceptedRequestOffer!.requestDeliveryOption == RequestDeliveryOptionEnum.both) {
populateRequestDeliveryOptions();
}
if (requestVM.currentSelectedRequest != null && requestVM.currentSelectedRequest!.address.isEmpty) {
requestVM.addressSparePartRequestDelivery = "";
@ -44,6 +48,18 @@ class _ReviewRequestOfferState extends State<ReviewRequestOffer> {
super.initState();
}
@override
void dispose() {
super.dispose();
}
populateRequestDeliveryOptions() {
scheduleMicrotask(() {
final requestVM = context.read<RequestsVM>();
requestVM.populateRequestDeliveryOptions();
});
}
Widget buildPersonalInformation() {
UserInfo userInfo = AppState().getUser.data!.userInfo!;
return Column(
@ -91,10 +107,19 @@ class _ReviewRequestOfferState extends State<ReviewRequestOffer> {
Widget buildLocationInformation(BuildContext context) {
final requestVM = context.watch<RequestsVM>();
String address = "";
if (requestVM.acceptedRequestOffer != null && requestVM.acceptedRequestOffer!.requestDeliveryOption == RequestDeliveryOptionEnum.delivery) {
address = requestVM.currentSelectedRequest!.address;
} else {
} else if (requestVM.acceptedRequestOffer != null && requestVM.acceptedRequestOffer!.requestDeliveryOption == RequestDeliveryOptionEnum.selfPickup) {
address = requestVM.currentSelectedOffer!.providerAddress ?? "";
} else {
if (requestVM.selectedDeliveryOptionEnum == RequestDeliveryOptionEnum.delivery) {
address = requestVM.currentSelectedRequest!.address;
} else if (requestVM.selectedDeliveryOptionEnum == RequestDeliveryOptionEnum.selfPickup) {
address = requestVM.currentSelectedOffer!.providerAddress ?? "";
} else {
address = "";
}
}
return Column(
crossAxisAlignment: CrossAxisAlignment.start,
@ -109,21 +134,48 @@ class _ReviewRequestOfferState extends State<ReviewRequestOffer> {
// ],
// ),
8.height,
Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Row(
children: [
SingleDetailWidget(text: address, type: LocaleKeys.location.tr()),
FiltersList(
filterList: requestVM.deliveryOptionsForReviewRequest,
onFilterTapped: (index, selectedFilterId) {
requestVM.updateSelectedDeliveryOptionEnum(selectedFilterId.toRequestDeliveryOptionEnum());
},
needLeftPadding: false,
).paddingOnly(bottom: 8),
if (requestVM.selectedDeliveryOptionEnumError.isNotEmpty) ...[
requestVM.selectedDeliveryOptionEnumError.toText(fontSize: 12, color: Colors.red),
],
if (requestVM.selectedDeliveryOptionEnum != null) ...[
Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
SingleDetailWidget(text: address, type: LocaleKeys.location.tr()),
if (requestVM.selectedDeliveryOptionEnum == RequestDeliveryOptionEnum.selfPickup) ...[
Row(
children: [
LocaleKeys.openMapLocation.tr().toText(
fontSize: 12,
isBold: true,
color: MyColors.primaryColor,
isUnderLine: true,
),
4.width,
Image.asset(
MyAssets.icRightUpPng,
height: 6,
width: 6,
color: MyColors.primaryColor,
),
],
).onPress(() async {
double latitude, longitude = 0.0;
latitude = double.parse(requestVM.currentSelectedOffer!.providerLatitude ?? "0.0");
longitude = double.parse(requestVM.currentSelectedOffer!.providerLongitude ?? "0.0");
await Utils.openLocationInMaps(latitude: latitude, longitude: longitude);
})
],
),
// 16.height,
// SingleDetailWidget(
// text: requestVM.additionalAddressSparePartRequestDelivery.isNotEmpty ? requestVM.additionalAddressSparePartRequestDelivery : "N/A",
// type: LocaleKeys.additionalAddressDetails.tr(),
// ),
],
),
],
),
],
],
);
}
@ -327,8 +379,13 @@ class _ReviewRequestOfferState extends State<ReviewRequestOffer> {
title: LocaleKeys.payNow.tr(),
isBold: false,
onPressed: () {
final requestVM = context.read<RequestsVM>();
// context.read<PaymentVM>().updateRequestId(id: requestVM.currentSelectedRequest!.id);
navigateWithName(context, AppRoutes.paymentMethodsView, arguments: PaymentTypes.request);
if (requestVM.acceptedRequestOffer!.requestDeliveryOption == RequestDeliveryOptionEnum.both && requestVM.selectedDeliveryOptionEnum == null) {
requestVM.updateSelectedDeliveryOptionEnumError(GlobalConsts.deliveryOptionSelectionError);
} else {
navigateWithName(context, AppRoutes.paymentMethodsView, arguments: PaymentTypes.request);
}
},
),
],

Loading…
Cancel
Save