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/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/lib/api/chat/chat_provider_model.dart b/lib/api/chat/chat_provider_model.dart
index bcb748c..b85aa85 100644
--- a/lib/api/chat/chat_provider_model.dart
+++ b/lib/api/chat/chat_provider_model.dart
@@ -1,8 +1,9 @@
import 'dart:convert';
-
+import 'dart:io';
+import 'dart:math';
+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:logging/logging.dart';
import 'package:mohem_flutter_app/api/api_client.dart';
@@ -10,11 +11,14 @@ 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:path_provider/path_provider.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 {
List userChatHistory = [];
@@ -22,8 +26,14 @@ class ChatProviderModel with ChangeNotifier, DiagnosticableTreeMixin {
late HubConnection hubConnection;
L.Logger logger = L.Logger();
TextEditingController message = TextEditingController();
- ScrollController scrollController = ScrollController();
bool isLoading = true;
+ bool isChatScreenActive = false;
+ late File selectedFile;
+ bool isFileSelected = false;
+ String sFileType = "";
+ bool isMsgReply = false;
+ List repliedMsg = [];
+ int paginationVal = 0;
Future getUserAutoLoginToken() async {
String userName = AppState().memberInformationList!.eMPLOYEEEMAILADDRESS!.split("@").first.toString();
@@ -40,9 +50,6 @@ 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)));
@@ -52,25 +59,52 @@ class ChatProviderModel with ChangeNotifier, DiagnosticableTreeMixin {
"${ApiConsts.chatServerBaseApiUrl}${ApiConsts.chatRecentUrl}",
token: AppState().chatDetails!.response!.token,
);
+
+ logger.d(AppState().chatDetails!.response!.token);
ChatUserModel recentChat = userToList(response.body);
+
+ Response favRes = await ApiClient().getJsonForResponse(
+ "${ApiConsts.chatServerBaseApiUrl}${ApiConsts.chatFavoriteUsers}${AppState().chatDetails!.response!.id}",
+ token: AppState().chatDetails!.response!.token,
+ );
+ print("============================== Fav Response =====================================");
+ ChatUserModel favUsersList = userToList(favRes.body);
+ for (var user in recentChat.response!) {
+ for (var favUser in favUsersList.response!) {
+ logger.d(favUser.isFav);
+ if (user.id == favUser.id) {
+ user.isFav = favUser.isFav;
+ }
+ }
+ }
+
pChatHistory = recentChat.response;
searchedChats = pChatHistory;
isLoading = false;
notifyListeners();
}
- void getSingleUserChatHistory({required String senderUID, required int receiverUID, required String pagination}) async {
+ void getSingleUserChatHistory({required String senderUID, required int receiverUID, required bool loadMore}) async {
isLoading = true;
+ if (!loadMore) paginationVal = 0;
+ logger.d(paginationVal);
+ 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);
+
+ logger.d(response.body);
if (response.statusCode == 204) {
- userChatHistory = [];
+ if (!loadMore) userChatHistory = [];
+ Utils.showToast("No More Data To Load");
} else {
- userChatHistory = getSingleUserChatModel(response.body);
+ if (loadMore) {
+ List temp = getSingleUserChatModel(response.body);
+ userChatHistory.insertAll(0, temp);
+ } else {
+ userChatHistory = getSingleUserChatModel(response.body);
+ }
}
isLoading = false;
notifyListeners();
@@ -80,6 +114,23 @@ class ChatProviderModel with ChangeNotifier, DiagnosticableTreeMixin {
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) {}
+ return result;
+ }
+
Future buildHubConnection() async {
HttpConnectionOptions httpOp = HttpConnectionOptions(skipNegotiation: false, logMessageContent: true);
hubConnection = await HubConnectionBuilder()
@@ -90,20 +141,13 @@ class ChatProviderModel with ChangeNotifier, DiagnosticableTreeMixin {
)
.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();
@@ -113,7 +157,7 @@ class ChatProviderModel with ChangeNotifier, DiagnosticableTreeMixin {
hubConnection.on("OnUserTypingAsync", onUserTyping);
// hubConnection.on("OnUserCountAsync", userCountAsync);
// hubConnection.on("OnUpdateUserChatHistoryWindowsAsync", updateChatHistoryWindow);
- // hubConnection.on("OnGetUserChatHistoryNotDeliveredAsync", chatNotDelivered);
+ hubConnection.on("OnGetUserChatHistoryNotDeliveredAsync", chatNotDelivered);
hubConnection.on("OnUpdateUserChatHistoryStatusAsync", updateUserChatStatus);
} else {
hubConnection.on("OnUpdateUserStatusAsync", changeStatus);
@@ -219,7 +263,8 @@ class ChatProviderModel with ChangeNotifier, DiagnosticableTreeMixin {
}
userChatHistory.add(data.first);
notifyListeners();
- scrollDown();
+ logger.d(isChatScreenActive);
+ // if (isChatScreenActive) scrollDown();
}
void onUserTyping(List