我已经在我的应用程序中实现了Google FCM,并在所有4个消息处理程序(onMessage,onLaunch,onResume和onBackground)上成功接收了消息。我的主要功能是导航到应用程序的特定屏幕。我使用NavigatorState键实现了此功能,它适用于4个处理程序中的3个(onBackground除外)。当我向我的应用发送数据消息时,会触发onBackground并尝试导航到特定屏幕时出现此错误:
I / flutter(17050):NoSuchMethodError:方法“ push”在null上调用。
I / flutter(17050):接收方:空
I / flutter(17050):尝试调用:push(“ MaterialPageRoute”的实例)
我的主要问题是,除了Navigator.of(context)或GlobalKey(NavigatorState)之外,是否有其他方法可以导航到屏幕,即使在最小化应用程序后仍会保留应用程序的导航状态?
答案 0 :(得分:0)
您只需要在通知有效负载中放入一些变量,以标识您希望应用导航到的位置,然后在 onResume 和 onLaunch 中进行如下检查
onResume: (Map<String, dynamic> message) async {
String type = message['data']['type'];
if(type != null){
if(type == 'chat'){
Navigator.push(context, MaterialPageRoute(builder: (context)=> YourPageRoute()));
}
}
}
onLaunch: (Map<String, dynamic> message) async {
String type = message['data']['type'];
if(type != null){
if(type == 'chat'){
Navigator.push(context, MaterialPageRoute(builder: (context)=> YourPageRoute()));
}
}
}
答案 1 :(得分:0)
我知道这是一个迟到的回复,但根据 Flutter 文档,您只能执行 HTTP 请求和 I/O 操作(例如读取和写入数据库)。原因是 onBackgroundMessage 是一个孤立的函数,这意味着你不能在类内部调用函数和变量。
我也被困在这个问题上,最近才在文档中发现。
自我提醒,请先阅读文档!