From 948689b67a05bc11773c758e474f786452e106b8 Mon Sep 17 00:00:00 2001 From: "Aamir.Muhammad" Date: Tue, 24 Jan 2023 16:24:44 +0300 Subject: [PATCH] Notification To Specific Screen --- lib/app_state/app_state.dart | 17 ---------- lib/classes/notifications.dart | 13 +++++--- lib/provider/chat_provider_model.dart | 47 ++++++++++++--------------- lib/ui/chat/chat_home.dart | 9 ++--- lib/ui/chat/chat_home_screen.dart | 4 --- lib/ui/landing/dashboard_screen.dart | 15 +++------ 6 files changed, 38 insertions(+), 67 deletions(-) diff --git a/lib/app_state/app_state.dart b/lib/app_state/app_state.dart index 36cdf3e..2b05306 100644 --- a/lib/app_state/app_state.dart +++ b/lib/app_state/app_state.dart @@ -181,21 +181,4 @@ class AppState { bool cancelRequestTrancsection = true; - bool _isAppOpendByChat = false; - - bool get getIsAppOpendByChat => _isAppOpendByChat; - - set setIsAppOpendByChat(bool isAppOpendByChat) { - _isAppOpendByChat = isAppOpendByChat; - } - - RemoteMessage? _notificationData; - - RemoteMessage? get getNotificationData => _notificationData; - - set setNotificationData(RemoteMessage? notificationData) { - _notificationData = notificationData; - } - - } diff --git a/lib/classes/notifications.dart b/lib/classes/notifications.dart index 02eb9e6..cebf76d 100644 --- a/lib/classes/notifications.dart +++ b/lib/classes/notifications.dart @@ -1,8 +1,10 @@ +import 'dart:convert'; import 'dart:io'; import 'package:firebase_messaging/firebase_messaging.dart'; import 'package:flutter/foundation.dart'; import 'package:flutter_local_notifications/flutter_local_notifications.dart'; import 'package:mohem_flutter_app/app_state/app_state.dart'; +import 'package:mohem_flutter_app/classes/utils.dart'; import 'package:mohem_flutter_app/main.dart'; import 'package:permission_handler/permission_handler.dart'; import 'package:firebase_core/firebase_core.dart'; @@ -58,12 +60,12 @@ class AppNotifications { } void _handleMessage(RemoteMessage message) { - AppState().setIsAppOpendByChat = true; + Utils.saveStringFromPrefs("isAppOpendByChat", "true"); } void _handleOpenApp(RemoteMessage message) { - AppState().setIsAppOpendByChat = true; - AppState().setNotificationData = message; + Utils.saveStringFromPrefs("isAppOpendByChat", "true"); + Utils.saveStringFromPrefs("notificationData", message.data["user_chat_history_response"].toString()); } } @@ -75,6 +77,7 @@ AndroidNotificationChannel channel = const AndroidNotificationChannel( Future backgroundMessageHandler(RemoteMessage message) async { await Firebase.initializeApp(); - AppState().setIsAppOpendByChat = true; - AppState().setNotificationData = message; + Utils.saveStringFromPrefs("isAppOpendByChat", "true"); + logger.w(message.data["user_chat_history_response"]); + Utils.saveStringFromPrefs("notificationData", message.data["user_chat_history_response"].toString()); } diff --git a/lib/provider/chat_provider_model.dart b/lib/provider/chat_provider_model.dart index 0a9c122..08b148d 100644 --- a/lib/provider/chat_provider_model.dart +++ b/lib/provider/chat_provider_model.dart @@ -16,6 +16,7 @@ import 'package:mohem_flutter_app/app_state/app_state.dart'; import 'package:mohem_flutter_app/classes/consts.dart'; import 'package:mohem_flutter_app/classes/encryption.dart'; import 'package:mohem_flutter_app/classes/utils.dart'; +import 'package:mohem_flutter_app/config/routes.dart'; import 'package:mohem_flutter_app/main.dart'; import 'package:mohem_flutter_app/models/chat/chat_user_image_model.dart'; import 'package:mohem_flutter_app/models/chat/get_search_user_chat_model.dart'; @@ -23,6 +24,7 @@ import 'package:mohem_flutter_app/models/chat/get_single_user_chat_list_model.da import 'package:mohem_flutter_app/models/chat/get_user_login_token_model.dart' as userLoginToken; import 'package:mohem_flutter_app/models/chat/make_user_favotire_unfavorite_chat_model.dart' as fav; import 'package:mohem_flutter_app/models/my_team/get_employee_subordinates_list.dart'; +import 'package:mohem_flutter_app/ui/chat/chat_detailed_screen.dart'; import 'package:mohem_flutter_app/ui/landing/dashboard_screen.dart'; import 'package:mohem_flutter_app/widgets/image_picker.dart'; import 'package:open_file/open_file.dart'; @@ -125,9 +127,7 @@ class ChatProviderModel with ChangeNotifier, DiagnosticableTreeMixin { ChatUserModel favUList = await ChatApiClient().getFavUsers(); if (favUList.response != null && recentChat.response != null) { favUsersList = favUList.response!; - favUsersList.sort( - (ChatUser a, ChatUser b) => a.userName!.toLowerCase().compareTo(b.userName!.toLowerCase()), - ); + 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) { @@ -319,12 +319,10 @@ class ChatProviderModel with ChangeNotifier, DiagnosticableTreeMixin { user.userStatus = items.first["userStatus"]; } } - if (teamMembersList != null) { - if (teamMembersList.isNotEmpty) { - for (ChatUser user in teamMembersList!) { - if (user.id == items.first["id"]) { - user.userStatus = items.first["userStatus"]; - } + if (teamMembersList.isNotEmpty) { + for (ChatUser user in teamMembersList!) { + if (user.id == items.first["id"]) { + user.userStatus = items.first["userStatus"]; } } } @@ -1453,24 +1451,19 @@ class ChatProviderModel with ChangeNotifier, DiagnosticableTreeMixin { } void openChatByNoti(BuildContext context) async { - print(AppState().getNotificationData!.messageId); - logger.d(AppState().getNotificationData!.toMap()); - if (AppState().getNotificationData!.data != null) { - logger.d(AppState().getNotificationData!.data["user_chat_history_response"]); - logger.w("-----------------------This is the Read Data------------------------------------"); -var tempData = jsonDecode(AppState().getNotificationData!.data["user_chat_history_response"]); - // List Temp = singleUserChatModelFromJson(); - // print(Temp.first.contant); - AppState().setIsAppOpendByChat = false; - AppState().setNotificationData = null; - // Navigator.pushNamed( - // context, - // AppRoutes.chatDetailed, - // arguments: ChatDetailedScreenParams(m.searchedChats![index], false), - // ).then((Object? value) { - // clearSelections(); - // notifyListeners(); - // }); + SingleUserChatModel nUser = SingleUserChatModel.fromJson( + jsonDecode(await Utils.getStringFromPrefs("notificationData")), + ); + Utils.saveStringFromPrefs("isAppOpendByChat", "false"); + Utils.saveStringFromPrefs("notificationData", "null"); + Future.delayed(const Duration(seconds: 1)); + for (ChatUser user in searchedChats!) { + if (user.id == nUser.targetUserId) { + Navigator.pushNamed(context, AppRoutes.chatDetailed, arguments: ChatDetailedScreenParams(user, false)); + return; + } else { + openChatByNoti(context); + } } } } diff --git a/lib/ui/chat/chat_home.dart b/lib/ui/chat/chat_home.dart index a6de775..2e23254 100644 --- a/lib/ui/chat/chat_home.dart +++ b/lib/ui/chat/chat_home.dart @@ -2,11 +2,11 @@ import 'package:easy_localization/easy_localization.dart'; import 'package:flutter/material.dart'; import 'package:mohem_flutter_app/app_state/app_state.dart'; import 'package:mohem_flutter_app/classes/colors.dart'; +import 'package:mohem_flutter_app/classes/utils.dart'; import 'package:mohem_flutter_app/extensions/int_extensions.dart'; import 'package:mohem_flutter_app/extensions/string_extensions.dart'; import 'package:mohem_flutter_app/extensions/widget_extensions.dart'; import 'package:mohem_flutter_app/generated/locale_keys.g.dart'; -import 'package:mohem_flutter_app/main.dart'; import 'package:mohem_flutter_app/provider/chat_provider_model.dart'; import 'package:mohem_flutter_app/ui/chat/chat_home_screen.dart'; import 'package:mohem_flutter_app/ui/chat/favorite_users_screen.dart'; @@ -51,12 +51,13 @@ class _ChatHomeState extends State { } if (data.searchedChats == null || data.searchedChats!.isEmpty) { data.isLoading = true; - data.getUserRecentChats().whenComplete(() { - if (AppState().getNotificationData != null) { + data.getUserRecentChats().whenComplete(() async { + String isAppOpendByChat = await Utils.getStringFromPrefs("isAppOpendByChat"); + String notificationData = await Utils.getStringFromPrefs("notificationData"); + if (isAppOpendByChat != "null" || isAppOpendByChat == "true" && notificationData != "null") { data.openChatByNoti(context); } }); - } } diff --git a/lib/ui/chat/chat_home_screen.dart b/lib/ui/chat/chat_home_screen.dart index aa47053..04d7c2e 100644 --- a/lib/ui/chat/chat_home_screen.dart +++ b/lib/ui/chat/chat_home_screen.dart @@ -26,14 +26,10 @@ class ChatHomeScreen extends StatefulWidget { class _ChatHomeScreenState extends State { TextEditingController search = TextEditingController(); - late ChatProviderModel data; - - final RefreshController _rc = RefreshController(initialRefresh: false); @override void initState() { super.initState(); - data = Provider.of(context, listen: false); } @override diff --git a/lib/ui/landing/dashboard_screen.dart b/lib/ui/landing/dashboard_screen.dart index b03f6a0..03bf9cd 100644 --- a/lib/ui/landing/dashboard_screen.dart +++ b/lib/ui/landing/dashboard_screen.dart @@ -93,17 +93,14 @@ class _DashboardScreenState extends State with WidgetsBindingOb } void _bHubCon() { - cProvider.getUserAutoLoginToken().whenComplete(() { - if (AppState().getIsAppOpendByChat) { - logger.w("From Notification"); + cProvider.getUserAutoLoginToken().whenComplete(() async { + String isAppOpendByChat = await Utils.getStringFromPrefs("isAppOpendByChat"); + if (isAppOpendByChat != null && isAppOpendByChat == "true") { Utils.showLoading(context); cProvider.buildHubConnection(); Future.delayed(const Duration(seconds: 2), () async { - if (AppState().getIsAppOpendByChat) { - cProvider.invokeChatCounter(userId: AppState().chatDetails!.response!.id!); - Utils.hideLoading(context); - gotoChat(context); - } + cProvider.invokeChatCounter(userId: AppState().chatDetails!.response!.id!); + gotoChat(context); }); } else { cProvider.buildHubConnection(); @@ -115,7 +112,6 @@ class _DashboardScreenState extends State with WidgetsBindingOb } Future checkHubCon() async { - print("-------------------------Again Hub Connection --------------------------------"); if (chatHubConnection.state == HubConnectionState.Connected) { await chatHubConnection.stop(); await chatHubConnection.start(); @@ -126,7 +122,6 @@ class _DashboardScreenState extends State with WidgetsBindingOb void gotoChat(BuildContext context) async { if (chatHubConnection.state == HubConnectionState.Connected) { - logger.w("Hub Connection Connected + App Opened From Chat Notification"); Utils.hideLoading(context); Navigator.pushNamed(context, AppRoutes.chat); }