首页 > 解决方案 > Flutter Firebase 消息传递:在收到后台通知时打开一个新屏幕

问题描述

调用了后台处理程序,一切正常,但我不知道如何获取 BuildContext 实例以导航到新屏幕。我有这个处理程序


Future<void> firebaseMessagingBackgroundHandler(RemoteMessage message) async {
    var notificationData = message.data;
    var view = notificationData['view'];

    if(view == 'MessagesScreen') {
        Map<String, dynamic> videoData = json.decode(
            notificationData['video_data']);
        VideoItem videoItem = VideoItem.fromJson(videoData);

       Navigator.pushNamed(context, '/playerScreen', arguments:{videoItem});
    } else {
        view = '/$view';
        Navigator.pushNamed(context, view);
    }

    return Future<void>.value();
}

它是这样称呼的

await Firebase.initializeApp();
FirebaseMessaging.onBackgroundMessage(firebaseMessagingBackgroundHandler);

我正在使用 Firebase 消息传递:9.1.2

知道如何实现这一目标吗?

谢谢

标签: flutterfirebase-cloud-messaging

解决方案


如果您想在应用程序终止时用户点击通知时进行导航,请尝试以下操作:

FirebaseMessaging.instance
    .getInitialMessage()
    .then((RemoteMessage? message) {
  if (message == null) return;

  var notificationData = message.data;
  var view = notificationData['view'];

  if(view == 'MessagesScreen') {
      Map<String, dynamic> videoData = json.decode(
          notificationData['video_data']);
      VideoItem videoItem = VideoItem.fromJson(videoData);

    Navigator.pushNamed(context, '/playerScreen', arguments:{videoItem});
  } else {
      view = '/$view';
      Navigator.pushNamed(context, view);
  }
  
});

检查这个例子:https ://github.com/FirebaseExtended/flutterfire/blob/master/packages/firebase_messaging/firebase_messaging/example/lib/main.dart#L116


推荐阅读