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
知道如何实现这一目标吗?
谢谢
这种行为是不可能直接发生的。后台处理程序作为新的隔离生成,您无法在其中执行任何与 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)
| 归档时间: |
|
| 查看次数: |
2569 次 |
| 最近记录: |