Notification To Specific Screen

merge-requests/142/head
Aamir Muhammad 2 years ago
parent b0267c9a16
commit ffd894ca28

@ -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;
}
}

@ -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<dynamic> backgroundMessageHandler(RemoteMessage message) async {
if (kDebugMode) {
print("Firebase backgroundMessageHandler!!!");
}
await Firebase.initializeApp();
AppState().setIsAppOpendByChat = true;
AppState().setNotificationData = message;
}

@ -120,7 +120,7 @@ class ChatProviderModel with ChangeNotifier, DiagnosticableTreeMixin {
}
}
void getUserRecentChats() async {
Future<void> 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<SingleUserChatModel> 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();
// });
}
}
}

@ -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<ChatHome> {
}
if (data.searchedChats == null || data.searchedChats!.isEmpty) {
data.isLoading = true;
data.getUserRecentChats();
data.getUserRecentChats().whenComplete(() {
if (AppState().getNotificationData != null) {
data.openChatByNoti(context);
}
});
}
}

@ -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<DashboardScreen> {
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<DashboardScreen> {
}
}
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) {

@ -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

Loading…
Cancel
Save