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