Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/flutter/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Flutter PluginRegistrantCallback未在Flatter中设置_Flutter_Firebase Cloud Messaging - Fatal编程技术网

Flutter PluginRegistrantCallback未在Flatter中设置

Flutter PluginRegistrantCallback未在Flatter中设置,flutter,firebase-cloud-messaging,Flutter,Firebase Cloud Messaging,我在运行应用程序时遇到此错误,应用程序关闭时的后台通知不起作用: firebase\u消息:^7.0.3 final FirebaseMessaging firebaseMessaging = FirebaseMessaging(); @override void initState() { super.initState(); registerNotification(); } void registerNotification() { f

我在运行应用程序时遇到此错误,应用程序关闭时的后台通知不起作用:

firebase\u消息:^7.0.3

final FirebaseMessaging firebaseMessaging = FirebaseMessaging();
  

  @override
  void initState() {
    super.initState();
    registerNotification();
  }



  void registerNotification() {
    firebaseMessaging.requestNotificationPermissions();

    firebaseMessaging.configure(onMessage: (Map<String, dynamic> message) {
      print('onMessage: $message');
      return ;
    }, onResume: (Map<String, dynamic> message) {
      print('onResume: $message');
      return Navigator.push(
          context,
          MaterialPageRoute(
              builder: (context) => NotificationsScreen()));
    }, onBackgroundMessage: _firebaseMessagingBackgroundHandler,
        onLaunch: (Map<String, dynamic> message) {
      print('onLaunch: $message');
      return;
    });

    firebaseMessaging.getToken().then((token) {
      print('token: $token');
      FirebaseFirestore.instance
          .collection('Consultant')
          .doc(firebaseUser.uid)
          .update({'deviceToken': token});
    }).catchError((err) {
      //Fluttertoast.showToast(msg: err.message.toString());
    });
  }
final FirebaseMessaging FirebaseMessaging=FirebaseMessaging();
@凌驾
void initState(){
super.initState();
注册通知();
}
无效注册表通知(){
firebaseMessaging.requestNotificationPermissions();
配置(onMessage:(映射消息){
打印('onMessage:$message');
返回;
},onResume:(映射消息){
打印('onResume:$message');
返回导航器.push(
上下文
材料路线(
生成器:(上下文)=>NotificationsScreen());
},onBackgroundMessage:_firebaseMessagingBackgroundHandler,
onLaunch:(映射消息){
打印('onLaunch:$message');
返回;
});
firebaseMessaging.getToken().then((令牌){
打印('token:$token');
FirebaseFirestore.instance
.收款(“顾问”)
.doc(firebaseUser.uid)
.update({'deviceToken':标记});
}).catchError((err){
//flatterToast.showtoos(msg:err.message.toString());
});
}
下课:

Future<dynamic> _firebaseMessagingBackgroundHandler(
    Map<String, dynamic> message,
    ) async {
  // Initialize the Firebase app
  await Firebase.initializeApp();
  print('onBackgroundMessage received: $message');
}
Future\u firebaseMessagingBackgroundHandler(
地图信息,
)异步的{
//初始化Firebase应用程序
等待Firebase.initializeApp();
打印('onBackgroundMessage received:$message');
}
我得到:
错误:flatter/lib/ui/ui\u dart\u state.cc(186)]未处理的异常:PlatformException(错误,未设置PluginRegistrantCallback.,null,java.lang.RuntimeException:未设置PluginRegistrantCallback。

我发现的问题是,当应用程序关闭时,我无法获得通知。 在互联网上搜索时,我发现:
PluginRegistrantCallback未设置
是一个涉及Application.kt类的错误,但我尝试以任何方式放置此文件均未成功。
有人有什么建议吗?

该错误来自您的应用程序文件。请确保正确注册

Application.java

package <your package name>;

import com.dexterous.flutterlocalnotifications.FlutterLocalNotificationsPlugin;
import io.flutter.plugin.common.PluginRegistry;
import io.flutter.plugins.firebasemessaging.FirebaseMessagingPlugin;
public final class CustomPluginRegistrant {
    public static void registerWith(PluginRegistry registry) {
        if (alreadyRegisteredWith(registry)) {
            return;
        }
        FirebaseMessagingPlugin.registerWith(registry.registrarFor("io.flutter.plugins.firebasemessaging.FirebaseMessagingPlugin"));
        FlutterLocalNotificationsPlugin.registerWith(registry.registrarFor("com.dexterous.flutterlocalnotifications.FlutterLocalNotificationsPlugin"));
    }

    private static boolean alreadyRegisteredWith(PluginRegistry registry) {
        final String key = CustomPluginRegistrant.class.getCanonicalName();
        if (registry.hasPlugin(key)) {
            return true;
        }
        registry.registrarFor(key);
        return false;
    }
}
包;
导入com.dexterous.flatterLocalNotifications.flatterLocalNotificationsPlugin;
导入io.flatter.plugin.common.PluginRegistry;
导入io.flatter.plugins.firebasemessaging.FirebaseMessagingPlugin;
公共最终类CustomPluginRegistrant{
公共静态无效注册表(PluginRegistry注册表){
if(alreadyRegisteredWith(注册表)){
返回;
}
FirebaseMessagingPlugin.registerWith(registry.registerFor(“io.flatter.plugins.FirebaseMessagingPlugin.FirebaseMessagingPlugin”);
flatterLocalNotificationsPlugin.registerWith(registry.registerFor(“com.dexterous.flatterLocalNotifications.flatterLocalNotificationsPlugin”);
}
私有静态布尔值alreadyRegisteredWith(PluginRegistry注册表){
最后一个字符串键=CustomPluginRegistrant.class.getCanonicalName();
if(registry.hasPlugin(key)){
返回true;
}
注册处。注册人(注册表项);
返回false;
}
}
在同一路径中添加一个名为CustomPluginRegistant.java的文件

package <your package name>;

import com.dexterous.flutterlocalnotifications.FlutterLocalNotificationsPlugin;
import io.flutter.plugin.common.PluginRegistry;
import io.flutter.plugins.firebasemessaging.FirebaseMessagingPlugin;
public final class CustomPluginRegistrant {
    public static void registerWith(PluginRegistry registry) {
        if (alreadyRegisteredWith(registry)) {
            return;
        }
        FirebaseMessagingPlugin.registerWith(registry.registrarFor("io.flutter.plugins.firebasemessaging.FirebaseMessagingPlugin"));
        FlutterLocalNotificationsPlugin.registerWith(registry.registrarFor("com.dexterous.flutterlocalnotifications.FlutterLocalNotificationsPlugin"));
    }

    private static boolean alreadyRegisteredWith(PluginRegistry registry) {
        final String key = CustomPluginRegistrant.class.getCanonicalName();
        if (registry.hasPlugin(key)) {
            return true;
        }
        registry.registrarFor(key);
        return false;
    }
}
包;
导入com.dexterous.flatterLocalNotifications.flatterLocalNotificationsPlugin;
导入io.flatter.plugin.common.PluginRegistry;
导入io.flatter.plugins.firebasemessaging.FirebaseMessagingPlugin;
公共最终类CustomPluginRegistrant{
公共静态无效注册表(PluginRegistry注册表){
if(alreadyRegisteredWith(注册表)){
返回;
}
FirebaseMessagingPlugin.registerWith(registry.registerFor(“io.flatter.plugins.FirebaseMessagingPlugin.FirebaseMessagingPlugin”);
flatterLocalNotificationsPlugin.registerWith(registry.registerFor(“com.dexterous.flatterLocalNotifications.flatterLocalNotificationsPlugin”);
}
私有静态布尔值alreadyRegisteredWith(PluginRegistry注册表){
最后一个字符串键=CustomPluginRegistrant.class.getCanonicalName();
if(registry.hasPlugin(key)){
返回true;
}
注册处。注册人(注册表项);
返回false;
}
}

如果您没有使用本地通知插件,则可以从代码中删除该部分。

我已尝试使用
应用程序。java
使用
firebase\u消息传递的解决方法:^7.0.3
,我遇到了很多问题。幸运的是,我遇到了一个关于如何为Flatter设置firebase的更新。如图所示鉴于此,当您使用flatter Android嵌入V2(flatter版本>=1.12)时,Android不需要额外的步骤。因此,我们首先向pubsec.yaml添加以下依赖项:

firebase_core: ^0.7.0
firebase_messaging: ^8.0.0-dev.15
我在中包含了一个更详细的答案和代码示例


您运行
flatter pub get
。然后按照中提到的每个步骤进行操作,就可以开始了。

我们需要将这些文件放在哪里的问题也一样?我假设我们需要将Application.java与CustomPluginRegistant.java一起放在java文件夹中路径是->android/app/src/main/java//为什么Appli中的代码是java是否与CustomPluginRegistrant中的类似?