From 6245aa9ef41c7edb56b085ba35f4f5bbfda3ac6f Mon Sep 17 00:00:00 2001 From: Faiz Hashmi Date: Sun, 10 Dec 2023 11:59:33 +0300 Subject: [PATCH] fixed messages bug --- lib/config/routes.dart | 4 ++- lib/view_models/chat_view_model.dart | 31 +++++++++++++++--------- lib/view_models/requests_view_model.dart | 30 +++++++++++++++++------ lib/views/chat/chat_view.dart | 6 ++--- lib/views/requests/offer_list_page.dart | 10 +++++++- 5 files changed, 56 insertions(+), 25 deletions(-) diff --git a/lib/config/routes.dart b/lib/config/routes.dart index 3da4861..fceeb3d 100644 --- a/lib/config/routes.dart +++ b/lib/config/routes.dart @@ -112,8 +112,10 @@ class AppRoutes { class ChatViewArguments { final RequestModel? requestModel; final ChatTypeEnum chatTypeEnum; + final String senderId; + final String receiverId; - ChatViewArguments({required this.chatTypeEnum, this.requestModel}); + ChatViewArguments({required this.chatTypeEnum, this.requestModel, required this.senderId, required this.receiverId}); } class OfferListPageArguments { diff --git a/lib/view_models/chat_view_model.dart b/lib/view_models/chat_view_model.dart index f91ce50..49a1dde 100644 --- a/lib/view_models/chat_view_model.dart +++ b/lib/view_models/chat_view_model.dart @@ -1,5 +1,3 @@ -import 'dart:convert'; - import 'package:flutter/cupertino.dart'; import 'package:mc_common_app/classes/app_state.dart'; import 'package:mc_common_app/extensions/string_extensions.dart'; @@ -25,6 +23,11 @@ class ChatVM extends ChangeNotifier { chatMessageText = value; } + clearChatMessageText() { + chatMessageText = ""; + notifyListeners(); + } + Future onNewMessageReceived({required List messages}) async { chatMessages.addAll(messages); notifyListeners(); @@ -43,7 +46,6 @@ class ChatVM extends ChangeNotifier { chat.add(chatMessage); } onNewMessageReceived(messages: chat); - Utils.showToast("I received ping : ${arguments.toString()}"); logger.i("I received ping : ${arguments.toString()}"); }); } catch (e) { @@ -100,11 +102,14 @@ class ChatVM extends ChangeNotifier { required int requestId, required String offerPrice, }) async { + if (message.isEmpty) return false; + if (hubConnection.state != HubConnectionState.connected) { await buildHubConnection(); } if (hubConnection.state == HubConnectionState.connected) { - final providerId = AppState().getUser.data!.userInfo!.providerId; + final userId = AppState().getUser.data!.userInfo!.userId.toString(); + final name = AppState().getUser.data!.userInfo!.firstName.toString(); hubConnection.invoke( "SendMessageRequestOffer", args: [ @@ -113,14 +118,6 @@ class ChatVM extends ChangeNotifier { "MessageType": chatMessageType.getIdFromChatMessageTypeEnum(), "Message": message, "RequestID": requestId, - // "RequestOfferID": 0, - // "RequestOffer": { - // "RequestID": requestId, - // "Price": double.parse(offerPrice), - // "ServiceProviderID": providerId, - // "OfferStatus": RequestOfferStatusEnum.offer.getIdFromRequestOfferStatusEnum(), - // "Comment": message, - // }, } ], ).catchError((e) { @@ -128,6 +125,16 @@ class ChatVM extends ChangeNotifier { Utils.showToast(e.toString()); return false; }); + ChatMessageModel chatMessageModel = ChatMessageModel( + messageType: chatMessageType.getIdFromChatMessageTypeEnum(), + message: message, + isMyMessage: true, + requestID: requestId, + senderName: name, + senderUserID: userId, + ); + + onNewMessageReceived(messages: [chatMessageModel]); } return true; } diff --git a/lib/view_models/requests_view_model.dart b/lib/view_models/requests_view_model.dart index d751286..2a8f583 100644 --- a/lib/view_models/requests_view_model.dart +++ b/lib/view_models/requests_view_model.dart @@ -1,6 +1,7 @@ -// ignore_for_file: use_build_context_synchronously +// ignore_for_file: use_build_context_synchronously, avoid_function_literals_in_foreach_calls import 'dart:convert'; +import 'dart:developer'; import 'dart:io'; import 'package:flutter/cupertino.dart'; import 'package:mc_common_app/classes/app_state.dart'; @@ -47,7 +48,7 @@ class RequestsVM extends BaseVM { requestsTypeFilterOptions.add(FilterListModel(title: myRequestsTypeEnum[i].enumValueStr, isSelected: false, id: myRequestsTypeEnum[i].enumValue)); } - print("requestsTypeFilterOptions: ${requestsTypeFilterOptions.toString()}"); + log("requestsTypeFilterOptions: ${requestsTypeFilterOptions.toString()}"); notifyListeners(); } @@ -110,8 +111,8 @@ class RequestsVM extends BaseVM { } void pickMultipleImages() async { - List Images = await commonServices.pickMultipleImages(); - pickedVehicleImages.addAll(Images); + List images = await commonServices.pickMultipleImages(); + pickedVehicleImages.addAll(images); if (pickedVehicleImages.isNotEmpty) vehicleImageError = ""; notifyListeners(); } @@ -286,7 +287,7 @@ class RequestsVM extends BaseVM { } } catch (e, s) { Utils.hideLoading(context); - print(s); + log(s.toString()); } } } @@ -407,11 +408,24 @@ class RequestsVM extends BaseVM { ); if (status) { + final senderName = AppState().getUser.data!.userInfo!.firstName; + final senderId = AppState().getUser.data!.userInfo!.userId; // resetSendOfferBottomSheet(); Navigator.pop(context); - ChatMessageModel chatMessageModel = ChatMessageModel(isMyMessage: true, message: message, messageType: ChatMessageTypeEnum.freeText, ); - context.read().onNewMessageReceived(messages: messages); - ChatViewArguments chatViewArguments = ChatViewArguments(chatTypeEnum: ChatTypeEnum.requestOffer, requestModel: requestModel); + ChatMessageModel chatMessageModel = ChatMessageModel( + isMyMessage: true, + message: message, + messageType: ChatMessageTypeEnum.freeText.getIdFromChatMessageTypeEnum(), + senderName: senderName, + senderUserID: senderId, + ); + context.read().onNewMessageReceived(messages: [chatMessageModel]); + ChatViewArguments chatViewArguments = ChatViewArguments( + chatTypeEnum: ChatTypeEnum.requestOffer, + requestModel: requestModel, + receiverId: requestModel.customerID, + senderId: senderId ?? "", + ); navigateWithName(context, AppRoutes.chatView, arguments: chatViewArguments); } } diff --git a/lib/views/chat/chat_view.dart b/lib/views/chat/chat_view.dart index 269371a..c2281af 100644 --- a/lib/views/chat/chat_view.dart +++ b/lib/views/chat/chat_view.dart @@ -63,9 +63,9 @@ class ChatView extends StatelessWidget { color: MyColors.darkPrimaryColor, size: 30, ).onPress( - () async { + () async { final status = await chatVM.onTextMessageSend( - receiverId: "7db5e1ae-6de4-47d7-984b-08db2842f899", //Todo: This should be managed somehow!! + receiverId: chatViewArguments.receiverId, message: chatVM.chatMessageText, requestId: chatViewArguments.chatTypeEnum == ChatTypeEnum.requestOffer ? chatViewArguments.requestModel!.id : 0, offerPrice: "0.0", @@ -73,7 +73,7 @@ class ChatView extends StatelessWidget { ); if (status) { - chatVM.updateChatMessageText(""); + chatVM.clearChatMessageText(); } }, ), diff --git a/lib/views/requests/offer_list_page.dart b/lib/views/requests/offer_list_page.dart index 51f078b..d3e9eda 100644 --- a/lib/views/requests/offer_list_page.dart +++ b/lib/views/requests/offer_list_page.dart @@ -1,4 +1,7 @@ +import 'dart:developer'; + import 'package:flutter/material.dart'; +import 'package:mc_common_app/classes/app_state.dart'; import 'package:mc_common_app/config/routes.dart'; import 'package:mc_common_app/extensions/int_extensions.dart'; import 'package:mc_common_app/extensions/string_extensions.dart'; @@ -79,7 +82,12 @@ class OfferListPage extends StatelessWidget { ), ], ).onPress(() { - ChatViewArguments chatViewArguments = ChatViewArguments(chatTypeEnum: ChatTypeEnum.requestOffer, requestModel: offerListPageArguments.requestModel); + log("here: ${offersModel.serviceProvider!.providerGUID}"); + ChatViewArguments chatViewArguments = ChatViewArguments( + chatTypeEnum: ChatTypeEnum.requestOffer, + receiverId: "${offersModel.serviceProvider!.providerGUID}", + senderId: AppState().getUser.data!.userInfo!.userId.toString(), + requestModel: offerListPageArguments.requestModel); navigateWithName(context, AppRoutes.chatView, arguments: chatViewArguments); }).toContainer(isShadowEnabled: true); },