Flutter Firebase 消息传递:在收到后台通知时打开新屏幕

eli*_*sha 3 flutter firebase-cloud-messaging

调用后台处理程序,一切正常,但我不知道如何获取 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();
}
Run Code Online (Sandbox Code Playgroud)

它的名字是这样的

await Firebase.initializeApp();
FirebaseMessaging.onBackgroundMessage(firebaseMessagingBackgroundHandler);
Run Code Online (Sandbox Code Playgroud)

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

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

谢谢

Kri*_* CN 5

这种行为是不可能直接发生的。后台处理程序作为新的隔离生成,您无法在其中执行任何与 UI 相关的操作。

您可以使用从 UI 线程侦听端口并将数据从后台隔离发送到此端口来执行隔离通信

在 UI 线程上监听:

  ReceivePort _port = ReceivePort();
  IsolateNameServer.registerPortWithName(_port.sendPort,'port_name');
  _port.listen((dynamic data) {
       /// navigate here
     });
Run Code Online (Sandbox Code Playgroud)

发送消息,在backgroundHandler内部:

final SendPort send = IsolateNameServer.lookupPortByName('port_name');
send.send(true);
Run Code Online (Sandbox Code Playgroud)