From 698aee348265fb0ab1b0f4a17d2c8801c930ff07 Mon Sep 17 00:00:00 2001 From: "Aamir.Muhammad" Date: Sun, 22 Jan 2023 11:11:02 +0300 Subject: [PATCH 1/3] Notification --- ios/Runner/Info.plist | 1 + lib/classes/notifications.dart | 81 +++++++++++++--------- lib/classes/push-notification-handler.dart | 59 ---------------- lib/ui/landing/dashboard_screen.dart | 19 ++++- lib/ui/login/login_screen.dart | 3 +- pubspec.yaml | 2 +- 6 files changed, 69 insertions(+), 96 deletions(-) delete mode 100644 lib/classes/push-notification-handler.dart diff --git a/ios/Runner/Info.plist b/ios/Runner/Info.plist index e326d8f..e7b7e3b 100644 --- a/ios/Runner/Info.plist +++ b/ios/Runner/Info.plist @@ -50,6 +50,7 @@ This app requires photo library access to select image as document & upload it. UIBackgroundModes + fetch remote-notification FirebaseAppDelegateProxyEnabled diff --git a/lib/classes/notifications.dart b/lib/classes/notifications.dart index b7d7988..8f5308d 100644 --- a/lib/classes/notifications.dart +++ b/lib/classes/notifications.dart @@ -1,12 +1,13 @@ 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/main.dart'; import 'package:permission_handler/permission_handler.dart'; -//final FlutterLocalNotificationsPlugin flutterLocalNotificationsPlugin = FlutterLocalNotificationsPlugin(); - +final FlutterLocalNotificationsPlugin flutterLocalNotificationsPlugin = FlutterLocalNotificationsPlugin(); class AppNotifications { static final AppNotifications _instance = AppNotifications._internal(); @@ -15,45 +16,63 @@ class AppNotifications { factory AppNotifications() => _instance; - // Future requestPermissions() async { - // if (Platform.isIOS) { - // await flutterLocalNotificationsPlugin.resolvePlatformSpecificImplementation()?.requestPermissions(alert: true, badge: true, sound: true); - // } else if (Platform.isAndroid) { - // AndroidFlutterLocalNotificationsPlugin? androidImplementation = flutterLocalNotificationsPlugin.resolvePlatformSpecificImplementation(); - // bool? granted = await androidImplementation?.requestPermission(); - // if (granted == false) { - // print("-------------------- Permission Granted ------------------------"); - // print(granted); - // await Permission.notification.request(); - // } - // } - // } - - // Future isAndroidPermGranted() async { - // if (Platform.isAndroid) { - // bool granted = await flutterLocalNotificationsPlugin.resolvePlatformSpecificImplementation()?.areNotificationsEnabled() ?? false; - // } - // } - - void initNotification(String? firebaseToken) async { - // await requestPermissions(); - AppState().deviceNotificationToken = firebaseToken; - // await Permission.notification.isDenied.then((value) { - // if (value) { - // Permission.notification.request(); - // } - // }); + Future requestPermissions() async { + if (Platform.isIOS) { + await flutterLocalNotificationsPlugin.resolvePlatformSpecificImplementation()?.requestPermissions(alert: true, badge: true, sound: true); + } else if (Platform.isAndroid) { + AndroidFlutterLocalNotificationsPlugin? androidImplementation = flutterLocalNotificationsPlugin.resolvePlatformSpecificImplementation(); + bool? granted = await androidImplementation?.requestPermission(); + if (granted == false) { + if (kDebugMode) { + print("-------------------- Permission Granted ------------------------"); + print(granted); + } + await Permission.notification.request(); + } + } + } + + void init(String? firebaseToken) async { + await requestPermissions(); + AppState().setDeviceToken = firebaseToken; + await Permission.notification.isDenied.then((bool value) { + if (value) { + Permission.notification.request(); + } + }); RemoteMessage? initialMessage = await FirebaseMessaging.instance.getInitialMessage(); + if (initialMessage != null) _handleMessage(initialMessage); FirebaseMessaging.onMessage.listen((RemoteMessage message) { if (message.notification != null) _handleMessage(message); }); + FirebaseMessaging.onMessageOpenedApp.listen(_handleMessage); + + FirebaseMessaging.onBackgroundMessage(backgroundMessageHandler); + + FirebaseMessaging.instance.onTokenRefresh.listen((String token) { + AppState().setDeviceToken = token; + }); } void _handleMessage(RemoteMessage message) { - print("Handle Message"); + if (kDebugMode) { + print("Handle Message"); + } logger.w(json.encode(message)); } } + +AndroidNotificationChannel channel = const AndroidNotificationChannel( + "high_importance_channel", + "High Importance Notifications", + importance: Importance.high, +); + +Future backgroundMessageHandler(RemoteMessage message) async { + if (kDebugMode) { + print("Firebase backgroundMessageHandler!!!"); + } +} diff --git a/lib/classes/push-notification-handler.dart b/lib/classes/push-notification-handler.dart deleted file mode 100644 index b95ceb2..0000000 --- a/lib/classes/push-notification-handler.dart +++ /dev/null @@ -1,59 +0,0 @@ -import 'dart:async'; -import 'dart:io'; - -import 'package:firebase_messaging/firebase_messaging.dart'; -import 'package:flutter/cupertino.dart'; -import 'package:flutter/material.dart'; -import 'package:mohem_flutter_app/app_state/app_state.dart'; - -// |--> Push Notification Background -Future backgroundMessageHandler(message) async { - print("Firebase backgroundMessageHandler!!!"); -} - -class PushNotificationHandler { - final BuildContext context; - static PushNotificationHandler? _instance; - - PushNotificationHandler(this.context) { - PushNotificationHandler._instance = this; - } - - static PushNotificationHandler getInstance() => _instance!; - - void init() async { - FirebaseMessaging.onMessage.listen((RemoteMessage message) async { - if (Platform.isIOS) { - await Future.delayed(Duration(milliseconds: 3000)).then((value) { - newMessage(message); - }); - } else { - newMessage(message); - } - }); - - FirebaseMessaging.onMessageOpenedApp.listen((RemoteMessage message) async { - if (Platform.isIOS) { - await Future.delayed(Duration(milliseconds: 3000)).then((value) { - newMessage(message); - }); - } else { - newMessage(message); - } - }); - - FirebaseMessaging.instance.onTokenRefresh.listen((fcm_token) { - print("Push Notification onTokenRefresh: " + fcm_token); - AppState().setDeviceToken = fcm_token; - }); - - FirebaseMessaging.onBackgroundMessage(backgroundMessageHandler); - } - - void newMessage(RemoteMessage remoteMessage) async { - print("Remote Message: " + remoteMessage.data.toString()); - if (remoteMessage.data.isEmpty) { - return; - } - } -} diff --git a/lib/ui/landing/dashboard_screen.dart b/lib/ui/landing/dashboard_screen.dart index 5d5549d..b82cd9c 100644 --- a/lib/ui/landing/dashboard_screen.dart +++ b/lib/ui/landing/dashboard_screen.dart @@ -59,7 +59,7 @@ class _DashboardScreenState extends State { marathonProvider = Provider.of(context, listen: false); cProvider = Provider.of(context, listen: false); _bHubCon(); - _onRefresh(); + _onRefresh(true); }); } @@ -78,7 +78,17 @@ class _DashboardScreenState extends State { }); } - void _onRefresh() async { + Future checkHubCon() async { + print("-------------------------Again Hub Connection --------------------------------"); + if (chatHubConnection.state == HubConnectionState.Connected) { + await chatHubConnection.stop(); + await chatHubConnection.start(); + } else if (chatHubConnection.state != HubConnectionState.Connected) { + await chatHubConnection.start(); + } + } + + void _onRefresh(bool isFromInit) async { data.initProvider(); // data.getITGNotification().then((value) { // print("--------------------detail_1-----------------"); @@ -93,6 +103,7 @@ class _DashboardScreenState extends State { data.fetchMenuEntries(); data.getCategoryOffersListAPI(context); marathonProvider.getMarathonDetailsFromApi(); + if (!isFromInit) checkHubCon(); _refreshController.refreshCompleted(); } @@ -192,7 +203,9 @@ class _DashboardScreenState extends State { color: MyColors.gradiantEndColor, ), controller: _refreshController, - onRefresh: _onRefresh, + onRefresh: () { + _onRefresh(false); + }, child: SingleChildScrollView( child: Column( children: [ diff --git a/lib/ui/login/login_screen.dart b/lib/ui/login/login_screen.dart index 6253002..eb9f5e0 100644 --- a/lib/ui/login/login_screen.dart +++ b/lib/ui/login/login_screen.dart @@ -13,7 +13,6 @@ import 'package:mohem_flutter_app/app_state/app_state.dart'; import 'package:mohem_flutter_app/classes/colors.dart'; import 'package:mohem_flutter_app/classes/consts.dart'; import 'package:mohem_flutter_app/classes/notifications.dart'; -import 'package:mohem_flutter_app/classes/push-notification-handler.dart'; import 'package:mohem_flutter_app/classes/utils.dart'; import 'package:mohem_flutter_app/config/routes.dart'; import 'package:mohem_flutter_app/extensions/int_extensions.dart'; @@ -97,7 +96,7 @@ class _LoginScreenState extends State { await Firebase.initializeApp(); _firebaseMessaging = FirebaseMessaging.instance; firebaseToken = await _firebaseMessaging.getToken(); - AppNotifications().initNotification(firebaseToken); + AppNotifications().init(firebaseToken); loginInfo = await LoginApiClient().getMobileLoginInfoNEW(firebaseToken ?? "", Platform.isAndroid ? "android" : "ios"); if (loginInfo == null) { await checkPrefs(); diff --git a/pubspec.yaml b/pubspec.yaml index 189128d..d06ab8b 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -92,7 +92,7 @@ dependencies: swipe_to: ^1.0.2 flutter_webrtc: ^0.9.16 camera: ^0.10.0+4 - #flutter_local_notifications: any + flutter_local_notifications: any #Chat Voice Message Recoding & Play audio_waveforms: ^0.1.5+1 From ffd894ca28a8b72e569f2fb5cf32d0ab94fe09c1 Mon Sep 17 00:00:00 2001 From: "Aamir.Muhammad" Date: Tue, 24 Jan 2023 09:46:54 +0300 Subject: [PATCH 2/3] Notification To Specific Screen --- lib/app_state/app_state.dart | 18 ++++++++++---- lib/classes/notifications.dart | 20 +++++++++------- lib/provider/chat_provider_model.dart | 34 ++++++++++++++++++++------- lib/ui/chat/chat_home.dart | 8 ++++++- lib/ui/landing/dashboard_screen.dart | 31 ++++++++++++++++++++---- pubspec.yaml | 1 + 6 files changed, 85 insertions(+), 27 deletions(-) diff --git a/lib/app_state/app_state.dart b/lib/app_state/app_state.dart index 731a45e..36cdf3e 100644 --- a/lib/app_state/app_state.dart +++ b/lib/app_state/app_state.dart @@ -1,6 +1,7 @@ import 'dart:io'; import 'package:easy_localization/easy_localization.dart'; +import 'package:firebase_messaging/firebase_messaging.dart'; import 'package:mohem_flutter_app/models/chat/get_user_login_token_model.dart'; import 'package:mohem_flutter_app/models/itg_forms_models/request_detail_model.dart'; import 'package:mohem_flutter_app/models/member_information_list_model.dart'; @@ -180,12 +181,21 @@ class AppState { bool cancelRequestTrancsection = true; + bool _isAppOpendByChat = false; - String? _deviceNotificationToken; + bool get getIsAppOpendByChat => _isAppOpendByChat; - String? get deviceNotificationToken => _deviceNotificationToken; + set setIsAppOpendByChat(bool isAppOpendByChat) { + _isAppOpendByChat = isAppOpendByChat; + } + + RemoteMessage? _notificationData; + + RemoteMessage? get getNotificationData => _notificationData; - set deviceNotificationToken(String? deviceNotificationToken) { - _deviceNotificationToken = deviceNotificationToken; + set setNotificationData(RemoteMessage? notificationData) { + _notificationData = notificationData; } + + } diff --git a/lib/classes/notifications.dart b/lib/classes/notifications.dart index 8f5308d..02eb9e6 100644 --- a/lib/classes/notifications.dart +++ b/lib/classes/notifications.dart @@ -1,4 +1,3 @@ -import 'dart:convert'; import 'dart:io'; import 'package:firebase_messaging/firebase_messaging.dart'; import 'package:flutter/foundation.dart'; @@ -6,6 +5,7 @@ import 'package:flutter_local_notifications/flutter_local_notifications.dart'; import 'package:mohem_flutter_app/app_state/app_state.dart'; import 'package:mohem_flutter_app/main.dart'; import 'package:permission_handler/permission_handler.dart'; +import 'package:firebase_core/firebase_core.dart'; final FlutterLocalNotificationsPlugin flutterLocalNotificationsPlugin = FlutterLocalNotificationsPlugin(); @@ -48,7 +48,7 @@ class AppNotifications { if (message.notification != null) _handleMessage(message); }); - FirebaseMessaging.onMessageOpenedApp.listen(_handleMessage); + FirebaseMessaging.onMessageOpenedApp.listen(_handleOpenApp); FirebaseMessaging.onBackgroundMessage(backgroundMessageHandler); @@ -58,10 +58,12 @@ class AppNotifications { } void _handleMessage(RemoteMessage message) { - if (kDebugMode) { - print("Handle Message"); - } - logger.w(json.encode(message)); + AppState().setIsAppOpendByChat = true; + } + + void _handleOpenApp(RemoteMessage message) { + AppState().setIsAppOpendByChat = true; + AppState().setNotificationData = message; } } @@ -72,7 +74,7 @@ AndroidNotificationChannel channel = const AndroidNotificationChannel( ); Future backgroundMessageHandler(RemoteMessage message) async { - if (kDebugMode) { - print("Firebase backgroundMessageHandler!!!"); - } + await Firebase.initializeApp(); + AppState().setIsAppOpendByChat = true; + AppState().setNotificationData = message; } diff --git a/lib/provider/chat_provider_model.dart b/lib/provider/chat_provider_model.dart index 71d7ccb..0a9c122 100644 --- a/lib/provider/chat_provider_model.dart +++ b/lib/provider/chat_provider_model.dart @@ -120,7 +120,7 @@ class ChatProviderModel with ChangeNotifier, DiagnosticableTreeMixin { } } - void getUserRecentChats() async { + Future getUserRecentChats() async { ChatUserModel recentChat = await ChatApiClient().getRecentChats(); ChatUserModel favUList = await ChatApiClient().getFavUsers(); if (favUList.response != null && recentChat.response != null) { @@ -137,16 +137,10 @@ class ChatProviderModel with ChangeNotifier, DiagnosticableTreeMixin { } } pChatHistory = recentChat.response ?? []; - pChatHistory!.sort( - (ChatUser a, ChatUser b) => a.userName!.toLowerCase().compareTo(b.userName!.toLowerCase()), - ); + pChatHistory!.sort((ChatUser a, ChatUser b) => a.userName!.toLowerCase().compareTo(b.userName!.toLowerCase())); searchedChats = pChatHistory; isLoading = false; - await invokeUserChatHistoryNotDeliveredAsync( - userId: int.parse( - AppState().chatDetails!.response!.id.toString(), - ), - ); + await invokeUserChatHistoryNotDeliveredAsync(userId: int.parse(AppState().chatDetails!.response!.id.toString())); sort(); notifyListeners(); if (searchedChats!.isNotEmpty || favUsersList.isNotEmpty) { @@ -1457,4 +1451,26 @@ class ChatProviderModel with ChangeNotifier, DiagnosticableTreeMixin { } return Material.TextDirection.ltr; } + + 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(); + // }); + } + } } diff --git a/lib/ui/chat/chat_home.dart b/lib/ui/chat/chat_home.dart index bbb3048..a6de775 100644 --- a/lib/ui/chat/chat_home.dart +++ b/lib/ui/chat/chat_home.dart @@ -6,6 +6,7 @@ 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'; @@ -50,7 +51,12 @@ class _ChatHomeState extends State { } if (data.searchedChats == null || data.searchedChats!.isEmpty) { data.isLoading = true; - data.getUserRecentChats(); + data.getUserRecentChats().whenComplete(() { + if (AppState().getNotificationData != null) { + data.openChatByNoti(context); + } + }); + } } diff --git a/lib/ui/landing/dashboard_screen.dart b/lib/ui/landing/dashboard_screen.dart index b82cd9c..8c1ef39 100644 --- a/lib/ui/landing/dashboard_screen.dart +++ b/lib/ui/landing/dashboard_screen.dart @@ -3,6 +3,7 @@ import 'dart:io'; import 'dart:ui' as ui; import 'package:easy_localization/easy_localization.dart'; +import 'package:flutter/foundation.dart'; import 'package:flutter/material.dart'; import 'package:flutter_countdown_timer/flutter_countdown_timer.dart'; import 'package:flutter_svg/flutter_svg.dart'; @@ -14,6 +15,7 @@ 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/models/offers_and_discounts/get_offers_list.dart'; import 'package:mohem_flutter_app/provider/chat_provider_model.dart'; import 'package:mohem_flutter_app/provider/dashboard_provider_model.dart'; @@ -71,10 +73,23 @@ class _DashboardScreenState extends State { void _bHubCon() { cProvider.getUserAutoLoginToken().whenComplete(() { - cProvider.buildHubConnection(); - Future.delayed(const Duration(seconds: 2), () { - cProvider.invokeChatCounter(userId: AppState().chatDetails!.response!.id!); - }); + if (AppState().getIsAppOpendByChat) { + logger.w("From Notification"); + 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); + } + }); + } else { + cProvider.buildHubConnection(); + Future.delayed(const Duration(seconds: 2), () { + cProvider.invokeChatCounter(userId: AppState().chatDetails!.response!.id!); + }); + } }); } @@ -88,6 +103,14 @@ class _DashboardScreenState extends State { } } + 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); + } + } + void _onRefresh(bool isFromInit) async { data.initProvider(); // data.getITGNotification().then((value) { diff --git a/pubspec.yaml b/pubspec.yaml index d06ab8b..1a784c2 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -93,6 +93,7 @@ dependencies: flutter_webrtc: ^0.9.16 camera: ^0.10.0+4 flutter_local_notifications: any + firebase_analytics: any #Chat Voice Message Recoding & Play audio_waveforms: ^0.1.5+1 From 948689b67a05bc11773c758e474f786452e106b8 Mon Sep 17 00:00:00 2001 From: "Aamir.Muhammad" Date: Tue, 24 Jan 2023 16:24:44 +0300 Subject: [PATCH 3/3] 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); }