feat(notification): handle notification onclick event

This commit is contained in:
anhtunz
2025-04-08 10:21:48 +07:00
parent 725d35aa5b
commit d4a6e236a0
4 changed files with 45 additions and 27 deletions

View File

@@ -3,12 +3,13 @@ import 'dart:math' as math;
import 'package:firebase_messaging/firebase_messaging.dart';
import 'package:flutter/material.dart';
import 'package:flutter_local_notifications/flutter_local_notifications.dart';
import 'package:persistent_bottom_nav_bar/persistent_bottom_nav_bar.dart';
class NotificationServices {
FirebaseMessaging messaging = FirebaseMessaging.instance;
final FlutterLocalNotificationsPlugin _flutterLocalNotificationsPlugin = FlutterLocalNotificationsPlugin();
Future<void> initLocalNotifications() async {
Future<void> initLocalNotifications(PersistentTabController controller) async {
const AndroidInitializationSettings androidInitializationSettings = AndroidInitializationSettings('@mipmap/ic_launcher');
const DarwinInitializationSettings iosInitializationSettings = DarwinInitializationSettings();
const InitializationSettings initializationSettings = InitializationSettings(
@@ -20,7 +21,7 @@ class NotificationServices {
initializationSettings,
onDidReceiveNotificationResponse: (NotificationResponse response) {
dev.log("Người dùng click thông báo ở foreground với payload: ${response.payload}");
handleMessage(response.payload);
handleMessage(response.payload,controller);
},
);
dev.log("Local notifications initialized");
@@ -126,18 +127,19 @@ class NotificationServices {
}
}
void handleMessage(String? payload) {
void handleMessage(String? payload, PersistentTabController controller) {
dev.log("Handling notification tap with payload: $payload");
controller.jumpToTab(1);
}
Future<void> setupInteractMessage() async {
Future<void> setupInteractMessage(PersistentTabController controller) async {
// Khi app terminated
RemoteMessage? initialMessage = await FirebaseMessaging.instance.getInitialMessage();
if (initialMessage != null) {
WidgetsBinding.instance.addPostFrameCallback((_) {
try {
handleMessage(initialMessage.data['type']);
handleMessage(initialMessage.data['type'],controller);
} catch (e, stack) {
dev.log("Error handling initial message: $e\n$stack");
}
@@ -146,7 +148,7 @@ class NotificationServices {
// Khi app ở background
FirebaseMessaging.onMessageOpenedApp.listen((message) {
try {
handleMessage(message.data['type']);
handleMessage(message.data['type'],controller);
} catch (e, stack) {
dev.log("Error in onMessageOpenedApp: $e\n$stack");
}