使用 SharedPreferences 时带有用于推送通知的后台处理程序的 MissingPluginException

Rep*_*pox 5 plugins dart flutter

我有以下文件,该文件基于有关如何管理后台消息(即应用程序终止或在后台时)的firebase_messaging示例。

该文件当前包含以下内容:

import 'package:flutter_local_notifications/flutter_local_notifications.dart';
import 'package:shared_preferences/shared_preferences.dart';
import 'notifications.dart';

Future<dynamic> backgroundMessageHandler(Map<String, dynamic> message) async {

  print("backgroundHandler: $message");
  SharedPreferences prefs = await SharedPreferences.getInstance();
  print(prefs.getInt('latest_id'));

}
Run Code Online (Sandbox Code Playgroud)

应用程序确实收到了通知,它在打印内容时显示,message但是当我尝试获取SharedPreferences 时,控制台向我显示以下消息并且代码执行停止:

I/flutter (17018): Unable to handle incoming background message.
I/flutter (17018): MissingPluginException(No implementation found for method getAll on channel plugins.flutter.io/shared_preferences)
Run Code Online (Sandbox Code Playgroud)

有没有可能解决这个问题?

小智 6

我知道这有点晚了,但我找到了解决方案。我分享给下一个遇到这个问题的人。您应该在 PluginRegistry 中添加 SharedPreferencesPlugin :

SharedPreferencesPlugin.registerWith(registry?.registrarFor("io.flutter.plugins.sharedpreferences.SharedPreferencesPlugin"));
Run Code Online (Sandbox Code Playgroud)

完整的类:

import io.flutter.app.FlutterApplication
import io.flutter.plugin.common.PluginRegistry
import com.tekartik.sqflite.SqflitePlugin
import io.flutter.plugins.firebasemessaging.FlutterFirebaseMessagingService
import com.dexterous.flutterlocalnotifications.FlutterLocalNotificationsPlugin
import io.flutter.plugins.sharedpreferences.SharedPreferencesPlugin

class Application : FlutterApplication(), PluginRegistry.PluginRegistrantCallback {
    override fun onCreate() {
        super.onCreate()

        FlutterFirebaseMessagingService.setPluginRegistrant(this);
    }

    override fun registerWith(registry: PluginRegistry?) {
        io.flutter.plugins.firebasemessaging.FirebaseMessagingPlugin.registerWith(registry?.registrarFor("io.flutter.plugins.firebasemessaging.FirebaseMessagingPlugin"));
        SqflitePlugin.registerWith(registry?.registrarFor("com.tekartik.sqflite.SqflitePlugin"));
        FlutterLocalNotificationsPlugin.registerWith(registry?.registrarFor("com.dexterous.flutterlocalnotifications.FlutterLocalNotificationsPlugin"))
        SharedPreferencesPlugin.registerWith(registry?.registrarFor("io.flutter.plugins.sharedpreferences.SharedPreferencesPlugin"));
    }

}
Run Code Online (Sandbox Code Playgroud)