diff --git a/assets/icons/chat/chat.svg b/assets/icons/chat/chat.svg
new file mode 100644
index 0000000..29d4471
--- /dev/null
+++ b/assets/icons/chat/chat.svg
@@ -0,0 +1,24 @@
+
diff --git a/assets/icons/chat/chat_active_icon.svg b/assets/icons/chat/chat_active_icon.svg
new file mode 100644
index 0000000..958d830
--- /dev/null
+++ b/assets/icons/chat/chat_active_icon.svg
@@ -0,0 +1,14 @@
+
diff --git a/assets/icons/chat/chat_send_icon.svg b/assets/icons/chat/chat_send_icon.svg
new file mode 100644
index 0000000..6f1de72
--- /dev/null
+++ b/assets/icons/chat/chat_send_icon.svg
@@ -0,0 +1,3 @@
+
diff --git a/assets/langs/ar-SA.json b/assets/langs/ar-SA.json
index e17edaa..00f18f3 100644
--- a/assets/langs/ar-SA.json
+++ b/assets/langs/ar-SA.json
@@ -394,7 +394,7 @@
"uploadFromGallery": "تحميل من\nملفات الجهاز",
"name": "الأسم",
"email": "ايميل",
- "noHistoryAvailable":"لايوجد سجل بيانات سابقة ",
+ "noHistoryAvailable": "لايوجد سجل بيانات سابقة ",
"purchaseRequisition": "طلب شراء",
"moveOrder": "طلب تغيير",
"humanResource": "الموارد البشريه",
@@ -405,7 +405,7 @@
"addFavoriteList": "هل تريد اضافة {name} لقائمة المفضله",
"feedbackUserExperience": "هذا للحصول على تعليقات حول تجربة المستخدم",
"rateUI": ".1 كيف تريد تقييم التطبيق",
- "submitSurvey":"ارسال الاستبيان",
+ "submitSurvey": "ارسال الاستبيان",
"typeHere": "اكتب هنا",
"info_detail": "تفاصيل المعلومات",
"amount_detail": "تفاصيل المبلغ",
@@ -451,5 +451,8 @@
"female": "Hello girl :) {}"
}
},
- "reset_locale": "Reset Language"
+ "reset_locale": "Reset Language",
+ "chat": "دردشة",
+ "mychats": "دردشاتي",
+ "createNewChat": "Create New Chat"
}
\ No newline at end of file
diff --git a/assets/langs/en-US.json b/assets/langs/en-US.json
index d16cfa1..6bb5972 100644
--- a/assets/langs/en-US.json
+++ b/assets/langs/en-US.json
@@ -451,5 +451,8 @@
"female": "Hello girl :) {}"
}
},
- "reset_locale": "Reset Language"
+ "reset_locale": "Reset Language",
+ "chat": "Chat",
+ "mychats": "My Chats",
+ "createNewChat": "Create New Chat"
}
\ No newline at end of file
diff --git a/lib/api/chat/chat_provider_model.dart b/lib/api/chat/chat_provider_model.dart
new file mode 100644
index 0000000..d4b49f8
--- /dev/null
+++ b/lib/api/chat/chat_provider_model.dart
@@ -0,0 +1,213 @@
+import 'dart:convert';
+
+import 'package:flutter/cupertino.dart';
+import 'package:flutter/foundation.dart';
+import 'package:fluttertoast/fluttertoast.dart';
+import 'package:http/http.dart';
+import 'package:logging/logging.dart';
+import 'package:mohem_flutter_app/api/api_client.dart';
+import 'package:mohem_flutter_app/classes/consts.dart';
+import 'package:mohem_flutter_app/classes/utils.dart';
+import 'package:mohem_flutter_app/models/chat/get_search_user_chat_model.dart';
+import 'package:mohem_flutter_app/models/chat/get_single_user_chat_list_Model.dart';
+import 'package:signalr_netcore/hub_connection.dart';
+import 'package:signalr_netcore/signalr_client.dart';
+import 'package:logger/logger.dart' as L;
+
+class ChatProviderModel with ChangeNotifier, DiagnosticableTreeMixin {
+ List userChatHistory = [];
+ List? pChatHistory, searchedChats;
+ late HubConnection hubConnection;
+ L.Logger logger = L.Logger();
+ TextEditingController message = TextEditingController();
+ ScrollController scrollController = ScrollController();
+ static String token =
+ "eyJhbGciOiJIUzUxMiIsInR5cCI6IkpXVCJ9.eyJuYW1laWQiOiI0MjA2MiIsImVtYWlsIjoiYWFtaXIubXVoYW1tYWRAY2xvdWRzb2x1dGlvbnMuY29tLnNhIiwiaHR0cDovL3NjaGVtYXMubWljcm9zb2Z0LmNvbS93cy8yMDA4LzA2L2lkZW50aXR5L2NsYWltcy91c2VyZGF0YSI6ImFhbWlyLm11aGFtbWFkIiwiaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3MvMjAwNS8wNS9pZGVudGl0eS9jbGFpbXMvbW9iaWxlcGhvbmUiOiI5NjY1MzA4OTYwMTgiLCJuYmYiOjE2NjU5MjA2NDEsImV4cCI6MTY2NjAwNzA0MSwiaWF0IjoxNjY1OTIwNjQxfQ.70tXWdpXtQ20PNBO3WF9ScWNWSyECpFfrW7_iuOmNfWmA63PCZzlTO0E6I3q3K9Kg2CWvOT9-dSDLjlRuXuC2w";
+
+ bool isLoading = true;
+
+ void getChatMemberFromSearch(String sName, int cUserId) async {
+ isLoading = true;
+ notifyListeners();
+ Response response = await ApiClient().getJsonForResponse(
+ "${ApiConsts.chatSearchMember}$sName/$cUserId",
+ token: token,
+ );
+ isLoading = false;
+ notifyListeners();
+ }
+
+ void getUserRecentChats() async {
+ Response response = await ApiClient().getJsonForResponse(
+ "${ApiConsts.chatServerBaseApiUrl}${ApiConsts.chatRecentUrl}",
+ token: token,
+ );
+ ChatUserModel recentChat = userToList(response.body);
+ pChatHistory = recentChat.response;
+ searchedChats = pChatHistory;
+ isLoading = false;
+ notifyListeners();
+ }
+
+ void getSingleUserChatHistory({required String senderUID, required int receiverUID, required String pagination}) async {
+ isLoading = true;
+ Response response = await ApiClient().getJsonForResponse(
+ "${ApiConsts.chatServerBaseApiUrl}${ApiConsts.chatSingleUserHistoryUrl}/$senderUID/$receiverUID/$pagination",
+ token: token,
+ );
+ userChatHistory = getSingleUserChatintoModel(response.body);
+ isLoading = false;
+ logger.d(jsonEncode(userChatHistory));
+ notifyListeners();
+ }
+
+ List getSingleUserChatintoModel(String str) => List.from(json.decode(str).map((x) => SingleUserChatModel.fromJson(x)));
+
+ ChatUserModel userToList(String str) => ChatUserModel.fromJson(json.decode(str));
+
+ void buildHubConnection() async {
+ HttpConnectionOptions httpOp = HttpConnectionOptions(skipNegotiation: false, logMessageContent: true);
+ hubConnection = await HubConnectionBuilder()
+ .withUrl(ApiConsts.chatHubConnectionUrl + "?UserId=42062&source=Web&access_token=$token", options: httpOp)
+ .withAutomaticReconnect(retryDelays: [2000, 5000, 10000, 20000])
+ .configureLogging(Logger("Logs Enabled"))
+ .build();
+ hubConnection.onclose(
+ ({Exception? error}) {
+ logger.d(error);
+ },
+ );
+ hubConnection.onreconnecting(
+ ({Exception? error}) {
+ logger.d(error);
+ logger.d("Reconnecting");
+ },
+ );
+ hubConnection.onreconnected(
+ ({String? connectionId}) {
+ logger.d("Reconnected");
+ },
+ );
+ if (hubConnection.state != HubConnectionState.Connected) {
+ await hubConnection.start();
+ hubConnection.on("OnUpdateUserStatusAsync", changeStatus);
+ hubConnection.on("OnDeliveredChatUserAsync", onMsgReceived);
+ // hubConnection.on("OnUserTypingAsync", onUserTyping);
+ //hubConnection.on("OnUserTypingAsync", changeTypingStatus);
+ } else {
+ hubConnection.on("OnUpdateUserStatusAsync", changeStatus);
+ hubConnection.on("OnDeliveredChatUserAsync", onMsgReceived);
+ // hubConnection.on("OnUserTypingAsync", onUserTyping);
+ //hubConnection.on("OnUserTypingAsync", changeTypingStatus);
+ }
+ isLoading = false;
+ notifyListeners();
+ }
+
+ void changeStatus(List