|
|
|
@ -1,6 +1,8 @@
|
|
|
|
// ignore_for_file: use_build_context_synchronously
|
|
|
|
// ignore_for_file: use_build_context_synchronously
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
import 'dart:convert';
|
|
|
|
import 'dart:developer';
|
|
|
|
import 'dart:developer';
|
|
|
|
|
|
|
|
import 'dart:io';
|
|
|
|
|
|
|
|
|
|
|
|
import 'package:flutter/cupertino.dart';
|
|
|
|
import 'package:flutter/cupertino.dart';
|
|
|
|
import 'package:mc_common_app/classes/app_state.dart';
|
|
|
|
import 'package:mc_common_app/classes/app_state.dart';
|
|
|
|
@ -13,8 +15,10 @@ import 'package:mc_common_app/models/general_models/generic_resp_model.dart';
|
|
|
|
import 'package:mc_common_app/models/requests_models/provider_offers_model.dart';
|
|
|
|
import 'package:mc_common_app/models/requests_models/provider_offers_model.dart';
|
|
|
|
import 'package:mc_common_app/repositories/chat_repo.dart';
|
|
|
|
import 'package:mc_common_app/repositories/chat_repo.dart';
|
|
|
|
import 'package:mc_common_app/repositories/request_repo.dart';
|
|
|
|
import 'package:mc_common_app/repositories/request_repo.dart';
|
|
|
|
|
|
|
|
import 'package:mc_common_app/services/common_services.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/utils/utils.dart';
|
|
|
|
|
|
|
|
import 'package:mc_common_app/view_models/ad_view_model.dart';
|
|
|
|
import 'package:mc_common_app/view_models/requests_view_model.dart';
|
|
|
|
import 'package:mc_common_app/view_models/requests_view_model.dart';
|
|
|
|
import 'package:provider/provider.dart';
|
|
|
|
import 'package:provider/provider.dart';
|
|
|
|
import 'package:signalr_core/signalr_core.dart';
|
|
|
|
import 'package:signalr_core/signalr_core.dart';
|
|
|
|
@ -23,8 +27,9 @@ import 'package:easy_localization/easy_localization.dart';
|
|
|
|
class ChatVM extends ChangeNotifier {
|
|
|
|
class ChatVM extends ChangeNotifier {
|
|
|
|
final ChatRepo chatRepo;
|
|
|
|
final ChatRepo chatRepo;
|
|
|
|
final RequestRepo requestRepo;
|
|
|
|
final RequestRepo requestRepo;
|
|
|
|
|
|
|
|
final CommonAppServices commonServices;
|
|
|
|
|
|
|
|
|
|
|
|
ChatVM({required this.chatRepo, required this.requestRepo});
|
|
|
|
ChatVM({required this.chatRepo, required this.requestRepo, required this.commonServices});
|
|
|
|
|
|
|
|
|
|
|
|
HubConnection? hubConnection;
|
|
|
|
HubConnection? hubConnection;
|
|
|
|
|
|
|
|
|
|
|
|
@ -295,15 +300,62 @@ class ChatVM extends ChangeNotifier {
|
|
|
|
return true;
|
|
|
|
return true;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
Future<bool> onTextMessageSendForRequest({
|
|
|
|
MessageImageModel convertFileToMessageImageModel({required File file}) {
|
|
|
|
|
|
|
|
List<int> imageBytes = file.readAsBytesSync();
|
|
|
|
|
|
|
|
String image = base64Encode(imageBytes);
|
|
|
|
|
|
|
|
MessageImageModel vehiclePostingImages = MessageImageModel(imageStr: image,
|
|
|
|
|
|
|
|
id: 0,
|
|
|
|
|
|
|
|
isFromNetwork: false,
|
|
|
|
|
|
|
|
reqOfferID: latestOfferId,
|
|
|
|
|
|
|
|
imagePath: file.path);
|
|
|
|
|
|
|
|
return vehiclePostingImages;
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
List<MessageImageModel> getMessagesImageList() {
|
|
|
|
|
|
|
|
List<MessageImageModel> requestImages = [];
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
for (var image in pickedImagesForMessage) {
|
|
|
|
|
|
|
|
var value = convertFileToMessageImageModel(file: File(image.filePath!));
|
|
|
|
|
|
|
|
requestImages.add(value);
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
return requestImages;
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
List<ImageModel> pickedImagesForMessage = [];
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
void removeImageFromList(String filePath) {
|
|
|
|
|
|
|
|
int index = pickedImagesForMessage.indexWhere((element) => element.filePath == filePath);
|
|
|
|
|
|
|
|
if (index == -1) {
|
|
|
|
|
|
|
|
return;
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
pickedImagesForMessage.removeAt(index);
|
|
|
|
|
|
|
|
notifyListeners();
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
void pickMultipleImages() async {
|
|
|
|
|
|
|
|
List<ImageModel> imageModels = [];
|
|
|
|
|
|
|
|
List<File> images = await commonServices.pickMultipleImages();
|
|
|
|
|
|
|
|
for (var element in images) {
|
|
|
|
|
|
|
|
imageModels.add(ImageModel(filePath: element.path, isFromNetwork: false));
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
pickedImagesForMessage.addAll(imageModels);
|
|
|
|
|
|
|
|
notifyListeners();
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
void clearPickedImagesForMessage() {
|
|
|
|
|
|
|
|
pickedImagesForMessage.clear();
|
|
|
|
|
|
|
|
notifyListeners();
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Future<bool> onMessageSendForRequest({
|
|
|
|
required String receiverId,
|
|
|
|
required String receiverId,
|
|
|
|
required ChatMessageTypeEnum chatMessageType,
|
|
|
|
required ChatMessageTypeEnum chatMessageType,
|
|
|
|
required String message,
|
|
|
|
required String message,
|
|
|
|
required int requestId,
|
|
|
|
required int requestId,
|
|
|
|
required String offerPrice,
|
|
|
|
|
|
|
|
required BuildContext context,
|
|
|
|
required BuildContext context,
|
|
|
|
}) async {
|
|
|
|
}) async {
|
|
|
|
if (message.isEmpty) return false;
|
|
|
|
if (chatMessageType == ChatMessageTypeEnum.freeText && message.isEmpty) return false;
|
|
|
|
|
|
|
|
|
|
|
|
if (hubConnection == null || hubConnection!.state != HubConnectionState.connected) {
|
|
|
|
if (hubConnection == null || hubConnection!.state != HubConnectionState.connected) {
|
|
|
|
logger.i("Hub Not Connected!!");
|
|
|
|
logger.i("Hub Not Connected!!");
|
|
|
|
@ -313,7 +365,13 @@ class ChatVM extends ChangeNotifier {
|
|
|
|
if (hubConnection!.state == HubConnectionState.connected) {
|
|
|
|
if (hubConnection!.state == HubConnectionState.connected) {
|
|
|
|
final userId = AppState().getUser.data!.userInfo!.userId.toString();
|
|
|
|
final userId = AppState().getUser.data!.userInfo!.userId.toString();
|
|
|
|
final name = AppState().getUser.data!.userInfo!.firstName.toString();
|
|
|
|
final name = AppState().getUser.data!.userInfo!.firstName.toString();
|
|
|
|
|
|
|
|
List<Map<String, dynamic>> requestImagesMap = [];
|
|
|
|
|
|
|
|
List<MessageImageModel> messageImages = getMessagesImageList();
|
|
|
|
|
|
|
|
if (messageImages.isNotEmpty && chatMessageType == ChatMessageTypeEnum.image) {
|
|
|
|
|
|
|
|
for (var element in messageImages) {
|
|
|
|
|
|
|
|
requestImagesMap.add(element.toJson());
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
final obj = <String, dynamic>{
|
|
|
|
final obj = <String, dynamic>{
|
|
|
|
"ReceiverUserID": receiverId,
|
|
|
|
"ReceiverUserID": receiverId,
|
|
|
|
"SenderUserID": userId,
|
|
|
|
"SenderUserID": userId,
|
|
|
|
@ -321,8 +379,11 @@ class ChatVM extends ChangeNotifier {
|
|
|
|
"ChatText": message,
|
|
|
|
"ChatText": message,
|
|
|
|
"RequestID": requestId,
|
|
|
|
"RequestID": requestId,
|
|
|
|
"ReqOfferID": latestOfferId,
|
|
|
|
"ReqOfferID": latestOfferId,
|
|
|
|
// "ReqOffer": {}
|
|
|
|
|
|
|
|
};
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if (chatMessageType == ChatMessageTypeEnum.image) {
|
|
|
|
|
|
|
|
obj.addAll({"ReqOfferImages": requestImagesMap});
|
|
|
|
|
|
|
|
}
|
|
|
|
logger.i(obj);
|
|
|
|
logger.i(obj);
|
|
|
|
|
|
|
|
|
|
|
|
hubConnection!.invoke(
|
|
|
|
hubConnection!.invoke(
|
|
|
|
@ -341,8 +402,9 @@ class ChatVM extends ChangeNotifier {
|
|
|
|
requestID: requestId,
|
|
|
|
requestID: requestId,
|
|
|
|
senderName: name,
|
|
|
|
senderName: name,
|
|
|
|
senderUserID: userId,
|
|
|
|
senderUserID: userId,
|
|
|
|
chatMessageTypeEnum: ChatMessageTypeEnum.freeText,
|
|
|
|
chatMessageTypeEnum: chatMessageType,
|
|
|
|
receiverUserID: receiverId,
|
|
|
|
receiverUserID: receiverId,
|
|
|
|
|
|
|
|
messageImages: messageImages,
|
|
|
|
);
|
|
|
|
);
|
|
|
|
|
|
|
|
|
|
|
|
if (AppState().currentAppType == AppType.customer) {
|
|
|
|
if (AppState().currentAppType == AppType.customer) {
|
|
|
|
@ -351,7 +413,10 @@ class ChatVM extends ChangeNotifier {
|
|
|
|
serviceProviderOffersList[providerIndex].chatMessages!.add(chatMessageModel);
|
|
|
|
serviceProviderOffersList[providerIndex].chatMessages!.add(chatMessageModel);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
} else {
|
|
|
|
} else {
|
|
|
|
int providerIndex = context.read<RequestsVM>().myFilteredRequests.indexWhere((element) => (element.customerUserID == receiverId && element.id == requestId));
|
|
|
|
int providerIndex = context
|
|
|
|
|
|
|
|
.read<RequestsVM>()
|
|
|
|
|
|
|
|
.myFilteredRequests
|
|
|
|
|
|
|
|
.indexWhere((element) => (element.customerUserID == receiverId && element.id == requestId));
|
|
|
|
log("providerIndex2:$providerIndex");
|
|
|
|
log("providerIndex2:$providerIndex");
|
|
|
|
if (providerIndex != -1) {
|
|
|
|
if (providerIndex != -1) {
|
|
|
|
context.read<RequestsVM>().addChatMessagesInRequestsModel(msg: chatMessageModel, index: providerIndex);
|
|
|
|
context.read<RequestsVM>().addChatMessagesInRequestsModel(msg: chatMessageModel, index: providerIndex);
|
|
|
|
@ -594,8 +659,7 @@ class ChatVM extends ChangeNotifier {
|
|
|
|
|
|
|
|
|
|
|
|
notifyListeners();
|
|
|
|
notifyListeners();
|
|
|
|
|
|
|
|
|
|
|
|
if (AppState().currentAppType == AppType.customer) {
|
|
|
|
if (AppState().currentAppType == AppType.customer) {} else {}
|
|
|
|
} else {}
|
|
|
|
|
|
|
|
return true;
|
|
|
|
return true;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
return false;
|
|
|
|
return false;
|
|
|
|
|