Flutter无法调用Firebase云消息传递的回调函数

15

当我尝试为Flutter的Firebase Cloud Messaging添加回调函数onBackgroundMessage时,我遇到了以下错误。

flutter: 在构建HomeScreen(dirty)时抛出了以下ArgumentError: flutter: 无效参数:无法设置后台消息处理程序!onBackgroundMessage应该是顶级或静态函数,而不应该与类或匿名函数绑定。 flutter: flutter: 相关的错误造成小部件是: flutter: HomeScreen flutter: file:///Users/sournvisal/Documents/projects/flutter-project/one_sala/lib/router.dart:17:39

请帮忙解决。 谢谢。

1个回答

31

如错误所示,onBackgroundMessage需要是顶层函数或静态函数

顶层函数是指位于类外部的函数。例如:

 Future<dynamic> myBackgroundMessageHandler(Map<String, dynamic> message) {
   if (message.containsKey('data')) {
     // Handle data message
     final dynamic data = message['data'];
   }

   if (message.containsKey('notification')) {
     // Handle notification message
     final dynamic notification = message['notification'];
   }

   // Or do other work.
 }

STATIC FUNCTION是指一个类内前缀为static的函数,它不与实例关联,因此无法访问this

class Fcm {
  static Future<dynamic> myBackgroundMessageHandler(Map<String, dynamic> message) {
    if (message.containsKey('data')) {
     // Handle data message
     final dynamic data = message['data'];
   }

   if (message.containsKey('notification')) {
     // Handle notification message
     final dynamic notification = message['notification'];
   }

   // Or do other work.
  }
}

3
你应该这样使用它:onBackgroundMessage: myBackgroundMessageHandler而不是这样:onBackgroundMessage: (message) => myBackgroundMessageHandler(message) - Firat
我怎样才能在 myBackgroundMessageHandler 中访问上下文(context)?例如,调用 Provider.of<myprovider>(context)? - AhWagih

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接