diff --git a/.gitignore b/.gitignore
index 034a5be..4a374d7 100644
--- a/.gitignore
+++ b/.gitignore
@@ -34,7 +34,6 @@ pubspec.lock
/build/
# Web related
-lib/generated_plugin_registrant.dart
# Symbolication related
app.*.symbols
@@ -46,3 +45,4 @@ app.*.map.json
/android/app/debug
/android/app/profile
/android/app/release
+/ios/
diff --git a/assets/icons/chat/call.svg b/assets/icons/chat/call.svg
new file mode 100644
index 0000000..843daf4
--- /dev/null
+++ b/assets/icons/chat/call.svg
@@ -0,0 +1,3 @@
+
diff --git a/assets/icons/chat/doc.svg b/assets/icons/chat/doc.svg
new file mode 100644
index 0000000..1f678df
--- /dev/null
+++ b/assets/icons/chat/doc.svg
@@ -0,0 +1,54 @@
+
+
+
diff --git a/assets/icons/chat/ppt.svg b/assets/icons/chat/ppt.svg
new file mode 100644
index 0000000..5134010
--- /dev/null
+++ b/assets/icons/chat/ppt.svg
@@ -0,0 +1,51 @@
+
+
+
diff --git a/assets/icons/chat/txt.svg b/assets/icons/chat/txt.svg
new file mode 100644
index 0000000..bbaf693
--- /dev/null
+++ b/assets/icons/chat/txt.svg
@@ -0,0 +1,51 @@
+
+
+
diff --git a/assets/icons/chat/video_call.svg b/assets/icons/chat/video_call.svg
new file mode 100644
index 0000000..2fceee6
--- /dev/null
+++ b/assets/icons/chat/video_call.svg
@@ -0,0 +1,6 @@
+
diff --git a/assets/icons/chat/xls.svg b/assets/icons/chat/xls.svg
new file mode 100644
index 0000000..325f974
--- /dev/null
+++ b/assets/icons/chat/xls.svg
@@ -0,0 +1,53 @@
+
+
+
diff --git a/assets/icons/chat/zip.svg b/assets/icons/chat/zip.svg
new file mode 100644
index 0000000..9aaaf6b
--- /dev/null
+++ b/assets/icons/chat/zip.svg
@@ -0,0 +1,51 @@
+
+
+
diff --git a/assets/images/monthly_attendance.svg b/assets/images/monthly_attendance.svg
index c84a9a1..b77ccc3 100644
--- a/assets/images/monthly_attendance.svg
+++ b/assets/images/monthly_attendance.svg
@@ -7,9 +7,9 @@
-
-
-
+
+
+
diff --git a/assets/langs/ar-SA.json b/assets/langs/ar-SA.json
index f72ea36..1c5851a 100644
--- a/assets/langs/ar-SA.json
+++ b/assets/langs/ar-SA.json
@@ -498,5 +498,7 @@
"verification": "تَحَقّق",
"resend": "إعادة إرسال",
"codeExpire": "انتهت صلاحية رمز التحقق",
- "typeheretoreply": "اكتب هنا للرد"
+ "typeheretoreply": "اكتب هنا للرد",
+ "favorite": "مفضلتي",
+ "searchfromchat": "البحث من الدردشة"
}
\ No newline at end of file
diff --git a/assets/langs/en-US.json b/assets/langs/en-US.json
index 896a365..b4b06f0 100644
--- a/assets/langs/en-US.json
+++ b/assets/langs/en-US.json
@@ -284,7 +284,7 @@
"add": "Add",
"edit": "Edit",
"myProfile": "My Profile",
- "mowadhafhi": "Mowadhafhi",
+ "mowadhafhi": "Mowadhafi",
"searchAnnouncements": "Search Announcements",
"announcements": "Announcements",
"swipeRequest": "Swipe Request",
@@ -296,7 +296,7 @@
"relatedTopic": "Related Topic",
"selectTopic": "Select Topic",
"supportingDocument": "Supporting Document",
- "mowadhafhiRequest": "Mowadhafhi Request",
+ "mowadhafhiRequest": "Mowadhafi Request",
"ticketReference": "Ticket Reference",
"section": "Section",
"topic": "Topic",
@@ -498,5 +498,8 @@
"resend": "Resend",
"codeExpire": "The verification code has been expired",
"allQuestionsCorrect": "You have answered all questions correct",
- "typeheretoreply": "Type here to reply"
+ "typeheretoreply": "Type here to reply",
+ "favorite" : "My Favorites",
+ "searchfromchat": "Search from chat"
+
}
\ No newline at end of file
diff --git a/assets/lottie/loading.json b/assets/lottie/loading.json
index 8190459..ea7bff3 100644
--- a/assets/lottie/loading.json
+++ b/assets/lottie/loading.json
@@ -1 +1 @@
-{"v":"5.8.1","fr":30,"ip":0,"op":60,"w":300,"h":300,"nm":"loading_6","ddd":0,"assets":[],"layers":[{"ddd":0,"ind":1,"ty":4,"nm":"Shape Layer 2","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":0,"s":[0]},{"t":60,"s":[360]}],"ix":10},"p":{"a":0,"k":[150.00000000000003,150.00000000000003,0],"ix":2,"l":2},"a":{"a":0,"k":[0,0,0],"ix":1,"l":2},"s":{"a":0,"k":[30.000000000000004,30.000000000000004,100],"ix":6,"l":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"d":1,"ty":"el","s":{"a":0,"k":[300,300],"ix":2},"p":{"a":0,"k":[0,0],"ix":3},"nm":"Ellipse Path 1","mn":"ADBE Vector Shape - Ellipse","hd":false},{"ty":"st","c":{"a":0,"k":[0.12941176470588237,0.7411764705882353,0.7764705882352941,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":50,"ix":5},"lc":2,"lj":1,"ml":4,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Ellipse 1","np":3,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false},{"ty":"tm","s":{"a":1,"k":[{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":10,"s":[0]},{"t":60,"s":[99]}],"ix":1},"e":{"a":1,"k":[{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":0,"s":[1]},{"t":50,"s":[100]}],"ix":2},"o":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":0,"s":[0]},{"t":60,"s":[3]}],"ix":3},"m":1,"ix":2,"nm":"Trim Paths 1","mn":"ADBE Vector Filter - Trim","hd":false}],"ip":0,"op":300,"st":0,"bm":0},{"ddd":0,"ind":2,"ty":4,"nm":"Shape Layer 1","sr":1,"ks":{"o":{"a":0,"k":30,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[150.00000000000003,150.00000000000003,0],"ix":2,"l":2},"a":{"a":0,"k":[0,0,0],"ix":1,"l":2},"s":{"a":0,"k":[30.000000000000004,30.000000000000004,100],"ix":6,"l":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"d":1,"ty":"el","s":{"a":0,"k":[300,300],"ix":2},"p":{"a":0,"k":[0,0],"ix":3},"nm":"Ellipse Path 1","mn":"ADBE Vector Shape - Ellipse","hd":false},{"ty":"st","c":{"a":0,"k":[0.7450980392156863,0.9254901960784314,0.9372549019607843,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":50,"ix":5},"lc":1,"lj":1,"ml":4,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Ellipse 1","np":3,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":300,"st":0,"bm":0}],"markers":[]}
\ No newline at end of file
+{"v":"5.8.1","fr":30,"ip":0,"op":60,"w":100,"h":100,"nm":"loading_6","ddd":0,"assets":[],"layers":[{"ddd":0,"ind":1,"ty":4,"nm":"Shape Layer 2","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":0,"s":[0]},{"t":60,"s":[360]}],"ix":10},"p":{"a":0,"k":[50.00000000000002,50.00000000000002,0],"ix":2,"l":2},"a":{"a":0,"k":[0,0,0],"ix":1,"l":2},"s":{"a":0,"k":[10.000000000000004,10.000000000000004,100],"ix":6,"l":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"d":1,"ty":"el","s":{"a":0,"k":[300,300],"ix":2},"p":{"a":0,"k":[0,0],"ix":3},"nm":"Ellipse Path 1","mn":"ADBE Vector Shape - Ellipse","hd":false},{"ty":"st","c":{"a":0,"k":[0.12941176470588237,0.7411764705882353,0.7764705882352941,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":50,"ix":5},"lc":2,"lj":1,"ml":4,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Ellipse 1","np":3,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false},{"ty":"tm","s":{"a":1,"k":[{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":10,"s":[0]},{"t":60,"s":[99]}],"ix":1},"e":{"a":1,"k":[{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":0,"s":[1]},{"t":50,"s":[100]}],"ix":2},"o":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":0,"s":[0]},{"t":60,"s":[3]}],"ix":3},"m":1,"ix":2,"nm":"Trim Paths 1","mn":"ADBE Vector Filter - Trim","hd":false}],"ip":0,"op":300,"st":0,"bm":0},{"ddd":0,"ind":2,"ty":4,"nm":"Shape Layer 1","sr":1,"ks":{"o":{"a":0,"k":30,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[50.00000000000002,50.00000000000002,0],"ix":2,"l":2},"a":{"a":0,"k":[0,0,0],"ix":1,"l":2},"s":{"a":0,"k":[10.000000000000004,10.000000000000004,100],"ix":6,"l":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"d":1,"ty":"el","s":{"a":0,"k":[300,300],"ix":2},"p":{"a":0,"k":[0,0],"ix":3},"nm":"Ellipse Path 1","mn":"ADBE Vector Shape - Ellipse","hd":false},{"ty":"st","c":{"a":0,"k":[0.7450980392156863,0.9254901960784314,0.9372549019607843,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":50,"ix":5},"lc":1,"lj":1,"ml":4,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Ellipse 1","np":3,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":300,"st":0,"bm":0}],"markers":[]}
\ No newline at end of file
diff --git a/ios/Runner/Info.plist b/ios/Runner/Info.plist
index 2ac7a44..2797543 100644
--- a/ios/Runner/Info.plist
+++ b/ios/Runner/Info.plist
@@ -44,6 +44,8 @@
This App requires access to your location to mark your attendance.
NSPhotoLibraryUsageDescription
This app requires photo library access to select image as document & upload it.
+ NSMicrophoneUsageDescription
+ This app requires microphone access to for call.
UIBackgroundModes
remote-notification
diff --git a/lib/api/chat/chat_provider_model.dart b/lib/api/chat/chat_provider_model.dart
index bcb748c..7a27c1f 100644
--- a/lib/api/chat/chat_provider_model.dart
+++ b/lib/api/chat/chat_provider_model.dart
@@ -1,37 +1,67 @@
+import 'dart:async';
import 'dart:convert';
+import 'dart:io';
+import 'package:easy_localization/easy_localization.dart';
import 'package:flutter/cupertino.dart';
import 'package:flutter/foundation.dart';
-import 'package:fluttertoast/fluttertoast.dart';
import 'package:http/http.dart';
+import 'package:logger/logger.dart' as L;
import 'package:logging/logging.dart';
import 'package:mohem_flutter_app/api/api_client.dart';
import 'package:mohem_flutter_app/app_state/app_state.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:mohem_flutter_app/models/chat/get_single_user_chat_list_model.dart';
import 'package:mohem_flutter_app/models/chat/get_user_login_token_model.dart' as login;
-import 'package:shared_preferences/shared_preferences.dart';
+import 'package:mohem_flutter_app/models/chat/make_user_favotire_unfavorite_chat_model.dart' as fav;
+import 'package:mohem_flutter_app/widgets/image_picker.dart';
import 'package:signalr_netcore/signalr_client.dart';
-import 'package:logger/logger.dart' as L;
+import 'package:uuid/uuid.dart';
class ChatProviderModel with ChangeNotifier, DiagnosticableTreeMixin {
+ ScrollController scrollController = ScrollController();
+ TextEditingController message = TextEditingController();
+ TextEditingController search = TextEditingController();
List userChatHistory = [];
List? pChatHistory, searchedChats;
late HubConnection hubConnection;
L.Logger logger = L.Logger();
- TextEditingController message = TextEditingController();
- ScrollController scrollController = ScrollController();
+ bool hubConInitialized = false;
+ String chatCID = '';
bool isLoading = true;
+ bool isChatScreenActive = false;
+ late File selectedFile;
+ bool isFileSelected = false;
+ String sFileType = "";
+ bool isMsgReply = false;
+ List repliedMsg = [];
+ List favUsersList = [];
+ int paginationVal = 0;
- Future getUserAutoLoginToken() async {
- String userName = AppState().memberInformationList!.eMPLOYEEEMAILADDRESS!.split("@").first.toString();
- Response response =
- await ApiClient().postJsonForResponse("${ApiConsts.chatServerBaseApiUrl}user/desktopuserlogin", {"userName": userName, "password": "FxIu26rWIKoF8n6mpbOmAjDLphzFGmpG", "loginType": 2});
- login.UserAutoLoginModel userLoginResponse = login.userAutoLoginModelFromJson(response.body);
- AppState().setchatUserDetails = userLoginResponse;
- await buildHubConnection();
+ Future getUserAutoLoginToken(BuildContext cxt) async {
+ Response response = await ApiClient().postJsonForResponse(
+ "${ApiConsts.chatServerBaseApiUrl}user/externaluserlogin",
+ {
+ "employeeNumber": AppState().memberInformationList!.eMPLOYEENUMBER.toString(),
+ "password": "FxIu26rWIKoF8n6mpbOmAjDLphzFGmpG",
+ },
+ );
+ login.UserAutoLoginModel userLoginResponse = login.userAutoLoginModelFromJson(
+ response.body,
+ );
+
+ if (userLoginResponse.response != null) {
+ hubConInitialized = true;
+ AppState().setchatUserDetails = userLoginResponse;
+ await buildHubConnection();
+ } else {
+ Utils.showToast(
+ userLoginResponse.errorResponses!.first.fieldName.toString() + " Erorr",
+ );
+ return;
+ }
}
Future?> getChatMemberFromSearch(String sName, int cUserId) async {
@@ -40,12 +70,13 @@ class ChatProviderModel with ChangeNotifier, DiagnosticableTreeMixin {
token: AppState().chatDetails!.response!.token,
);
return searchUserJsonModel(response.body);
- logger.d(response.body);
- isLoading = false;
- notifyListeners();
}
- List searchUserJsonModel(String str) => List.from(json.decode(str).map((x) => ChatUser.fromJson(x)));
+ List searchUserJsonModel(String str) => List.from(
+ json.decode(str).map(
+ (x) => ChatUser.fromJson(x),
+ ),
+ );
void getUserRecentChats() async {
Response response = await ApiClient().getJsonForResponse(
@@ -53,80 +84,210 @@ class ChatProviderModel with ChangeNotifier, DiagnosticableTreeMixin {
token: AppState().chatDetails!.response!.token,
);
ChatUserModel recentChat = userToList(response.body);
- pChatHistory = recentChat.response;
+
+ Response favRes = await ApiClient().getJsonForResponse(
+ "${ApiConsts.chatServerBaseApiUrl}${ApiConsts.chatFavoriteUsers}${AppState().chatDetails!.response!.id}",
+ token: AppState().chatDetails!.response!.token,
+ );
+ ChatUserModel favUList = userToList(favRes.body);
+
+ if (favUList.response != null && recentChat.response != null) {
+ favUsersList = favUList.response!;
+ favUsersList.sort(
+ (ChatUser a, ChatUser b) => a.userName!.toLowerCase().compareTo(
+ b.userName!.toLowerCase(),
+ ),
+ );
+ for (dynamic user in recentChat.response!) {
+ for (dynamic favUser in favUList.response!) {
+ if (user.id == favUser.id) {
+ user.isFav = favUser.isFav;
+ }
+ }
+ }
+ }
+ pChatHistory = recentChat.response ?? [];
+ pChatHistory!.sort(
+ (ChatUser a, ChatUser b) => a.userName!.toLowerCase().compareTo(
+ b.userName!.toLowerCase(),
+ ),
+ );
+
searchedChats = pChatHistory;
isLoading = false;
notifyListeners();
}
- void getSingleUserChatHistory({required String senderUID, required int receiverUID, required String pagination}) async {
+ Future getUserChatHistoryNotDeliveredAsync({required int userId}) async {
+ await hubConnection.invoke(
+ "GetUserChatHistoryNotDeliveredAsync",
+ args: [userId],
+ );
+ return "";
+ }
+
+ void getSingleUserChatHistory({required int senderUID, required int receiverUID, required bool loadMore, bool isNewChat = false}) async {
isLoading = true;
+ if (isNewChat) userChatHistory = [];
+ if (!loadMore) paginationVal = 0;
+ isChatScreenActive = true;
Response response = await ApiClient().getJsonForResponse(
- "${ApiConsts.chatServerBaseApiUrl}${ApiConsts.chatSingleUserHistoryUrl}/$senderUID/$receiverUID/$pagination",
+ "${ApiConsts.chatServerBaseApiUrl}${ApiConsts.chatSingleUserHistoryUrl}/$senderUID/$receiverUID/$paginationVal",
token: AppState().chatDetails!.response!.token,
);
- logger.d(response.statusCode);
- print(response.body);
if (response.statusCode == 204) {
- userChatHistory = [];
+ if (isNewChat) {
+ userChatHistory = [];
+ } else if (loadMore) {
+ // userChatHistory = [];
+ Utils.showToast("No More Data To Load");
+ }
} else {
- userChatHistory = getSingleUserChatModel(response.body);
+ if (loadMore) {
+ List temp = getSingleUserChatModel(
+ response.body,
+ ).reversed.toList();
+ userChatHistory.addAll(
+ temp,
+ );
+ } else {
+ userChatHistory = getSingleUserChatModel(
+ response.body,
+ ).reversed.toList();
+ }
}
+ await getUserChatHistoryNotDeliveredAsync(
+ userId: senderUID,
+ );
isLoading = false;
notifyListeners();
+ markRead(
+ userChatHistory,
+ receiverUID,
+ );
+ generateConvId();
+ }
+
+ void generateConvId() async {
+ Uuid uuid = const Uuid();
+ chatCID = uuid.v4();
+ }
+
+ void markRead(List data, reciverID) {
+ for (SingleUserChatModel element in data!) {
+ if (!element.isSeen!) {
+ dynamic data = [
+ {
+ "userChatHistoryId": element.userChatHistoryId,
+ "TargetUserId": element.targetUserId,
+ "isDelivered": true,
+ "isSeen": true,
+ }
+ ];
+ updateUserChatHistoryStatusAsync(data);
+ }
+ }
+ for (ChatUser element in searchedChats!) {
+ if (element.id == reciverID) {
+ element.unreadMessageCount = 0;
+ notifyListeners();
+ }
+ }
+ }
+
+ void updateUserChatHistoryStatusAsync(List data) {
+ hubConnection.invoke(
+ "UpdateUserChatHistoryStatusAsync",
+ args: [data],
+ );
}
- List getSingleUserChatModel(String str) => List.from(json.decode(str).map((x) => SingleUserChatModel.fromJson(x)));
+ List getSingleUserChatModel(String str) => List.from(
+ json.decode(str).map(
+ (x) => SingleUserChatModel.fromJson(x),
+ ),
+ );
- ChatUserModel userToList(String str) => ChatUserModel.fromJson(json.decode(str));
+ ChatUserModel userToList(String str) => ChatUserModel.fromJson(
+ json.decode(str),
+ );
+
+ Future uploadAttachments(String userId, File file) async {
+ dynamic result;
+ dynamic request = MultipartRequest(
+ 'POST',
+ Uri.parse(
+ '${ApiConsts.chatServerBaseApiUrl}${ApiConsts.chatMediaImageUploadUrl}',
+ ),
+ );
+ request.fields.addAll({'userId': userId, 'fileSource': '1'});
+ request.files.add(await MultipartFile.fromPath('files', file.path));
+ request.headers.addAll(
+ {
+ 'Authorization': 'Bearer ${AppState().chatDetails!.response!.token}',
+ },
+ );
+ try {
+ StreamedResponse response = await request.send();
+ if (response.statusCode == 200) {
+ result = jsonDecode(
+ await response.stream.bytesToString(),
+ );
+ } else {
+ result = [];
+ }
+ } catch (e) {
+ if (kDebugMode) {
+ print(e);
+ }
+ }
+ ;
+ return result;
+ }
Future buildHubConnection() async {
- HttpConnectionOptions httpOp = HttpConnectionOptions(skipNegotiation: false, logMessageContent: true);
- hubConnection = await HubConnectionBuilder()
- .withUrl(ApiConsts.chatHubConnectionUrl + "?UserId=${AppState().chatDetails!.response!.id}&source=Web&access_token=${AppState().chatDetails!.response!.token}", options: httpOp)
- .withAutomaticReconnect(retryDelays: [2000, 5000, 10000, 20000])
+ HttpConnectionOptions httpOp = HttpConnectionOptions(
+ skipNegotiation: false,
+ logMessageContent: true,
+ );
+ hubConnection = HubConnectionBuilder()
+ .withUrl(
+ ApiConsts.chatHubConnectionUrl + "?UserId=${AppState().chatDetails!.response!.id}&source=Web&access_token=${AppState().chatDetails!.response!.token}",
+ options: httpOp,
+ )
+ .withAutomaticReconnect(
+ retryDelays: [2000, 5000, 10000, 20000],
+ )
.configureLogging(
- Logger("Logs Enabled"),
+ Logger("Loggin"),
)
.build();
hubConnection.onclose(
- ({Exception? error}) {
- // logger.d(error);
- },
+ ({Exception? error}) {},
);
hubConnection.onreconnecting(
- ({Exception? error}) {
- // logger.d(error);
- // logger.d("Reconnecting");
- },
+ ({Exception? error}) {},
);
hubConnection.onreconnected(
- ({String? connectionId}) {
- // logger.d("Reconnected");
- },
+ ({String? connectionId}) {},
);
if (hubConnection.state != HubConnectionState.Connected) {
await hubConnection.start();
+ getUserChatHistoryNotDeliveredAsync(
+ userId: int.parse(
+ AppState().chatDetails!.response!.id.toString(),
+ ),
+ );
hubConnection.on("OnUpdateUserStatusAsync", changeStatus);
hubConnection.on("OnDeliveredChatUserAsync", onMsgReceived);
+ // hubConnection.on("OnSeenChatUserAsync", onChatSeen);
- hubConnection.on("OnUserTypingAsync", onUserTyping);
- // hubConnection.on("OnUserCountAsync", userCountAsync);
- // hubConnection.on("OnUpdateUserChatHistoryWindowsAsync", updateChatHistoryWindow);
- // hubConnection.on("OnGetUserChatHistoryNotDeliveredAsync", chatNotDelivered);
- hubConnection.on("OnUpdateUserChatHistoryStatusAsync", updateUserChatStatus);
- } else {
- hubConnection.on("OnUpdateUserStatusAsync", changeStatus);
- hubConnection.on("OnDeliveredChatUserAsync", onMsgReceived);
-
- hubConnection.on("OnUserTypingAsync", onUserTyping);
- // hubConnection.on("OnUserCountAsync", userCountAsync);
- // hubConnection.on("OnUpdateUserChatHistoryWindowsAsync", updateChatHistoryWindow);
- // hubConnection.on("OnGetUserChatHistoryNotDeliveredAsync", chatNotDelivered);
+ //hubConnection.on("OnUserTypingAsync", onUserTyping);
+ hubConnection.on("OnUserCountAsync", userCountAsync);
+ hubConnection.on("OnUpdateUserChatHistoryWindowsAsync", updateChatHistoryWindow);
+ hubConnection.on("OnGetUserChatHistoryNotDeliveredAsync", chatNotDelivered);
hubConnection.on("OnUpdateUserChatHistoryStatusAsync", updateUserChatStatus);
}
- isLoading = false;
- notifyListeners();
}
void updateUserChatStatus(List