flutter - 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
知道如何实现这一目标吗?
谢谢
解决方案
如果您想在应用程序终止时用户点击通知时进行导航,请尝试以下操作:
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);
}
});
推荐阅读
- python - 从 py 文件中使用 scrapy(不在命令行中)
- css - 如何将多个内联样式作为道具应用到组件?
- json - 是否接受 XML 并使用 JSON 切换协议进行响应?
- facebook - 在 ionic 4 中使用 facebook 登录
- c++ - EEPROM协议误解
- python-3.x - 如何在 tensorflow 2 Tensorflow 2 / Keras 中进行自定义验证步骤?
- c# - C# 实体框架 AddOrUpdate 错误仍然存在?
- flutter - 为什么 BlocBuilder 在使用 get_it 时卡在初始状态?
- r - 在R中将一个变量拆分为两个新变量
- reactjs - 移动鼠标时从 react-leaflet 获取纬度和经度