Can't navigate to the specific page with notfification tap. Flutter Deeplinking Issue

852 views Asked by At
//root dart file

  FirebaseMessaging.onBackgroundMessage(_backgroundMessageHandler); 
  await NotificationService.instance.initializeNotifications();

  Future<void> _backgroundMessageHandler(RemoteMessage message) async {
  await Firebase.initializeApp();
 }

//In, NotificationService file, I have initialized 
 AwesomeNotification(awesome_notification package),and have 

  //This handles notification actions

  AwesomeNotifications().actionStream.listen((notification) async {
  print(notification.payload);
  if (notification.payload != null) {
    final payload = notification.payload!;
    if (payload['type'] == 'vaccine-records') {
      _appRouter.root.innerRouterOf(DashboardRouter.name)
        ?..innerRouterOf<TabsRouter>(DashboardRoute.name)?.setActiveIndex(2)
        ..navigate(
          VaccineRecordsRouter(
            petId: int.parse(payload['id']!),
            petType: int.parse(payload['pet_type']!),
            petName: notification.title,
          ),
        );
    }
  }
});

 //this listens to new notification from Firebase cloud messaging

FirebaseMessaging.onMessage.listen((message) async {
  print(message.data);
  if (message.data.isNotEmpty) {
    await AwesomeNotifications().createNotificationFromJsonData(message.data);
  } else {
    print('here');
    await AwesomeNotifications().createNotification(
      content: NotificationContent(
        id: 0,
        channelKey: 'basic_channel',
        title: message.notification?.title,
        body: message.notification?.body,
        showWhen: true,
        displayOnForeground: true,
        displayOnBackground: true,
      ),
    );
  }
});
}

When I tap on the notification, it takes me to homepage of my app. I want it to navigate me to some other screen.When the app is in the foreground and I receive the notification, it takes me to the desired page. But when the app is in the background and the notification is received, it takes me to the homepage.How is this happening since the both time i get AwesomeNotifications().actionStream.listen((notification) async {} to execute?

1

There are 1 answers

3
Ganesh Bhat On

I would suggest you use Firebase dynamic links to send the users to specific page based on the payload of notification.

In your current case,

onMessage function is triggered only when the app is in foreground.

Notifications must be handled for 3 states.

  • When app is in foreground
  • When app is in background
  • When app is terminated

Use the following :

//when app is terminated
  FirebaseMessaging.instance.getInitialMessage().then((value) {
    if (value != null) {
      _onNotificationMessage(context, value); // custom function to handle notification
    }
  });

//when app is in foreground
  FirebaseMessaging.onMessage.listen((message) {
    _onProcessMessage(context, message); // custom function to handle notification
  });

//when app is in background
  FirebaseMessaging.onMessageOpenedApp.listen((message) {
    _onNotificationMessage(context, message); // custom function to handle notification
  });
}