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

MissingPluginException with background handler for push notifications when using SharedPreferences

我有以下文件,该文件基于关于如何管理后台消息(即应用程序终止或在后台时)的 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'));

}

应用程序 确实 收到通知,当它打印 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)

可以解决这个问题吗?

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

SharedPreferencesPlugin.registerWith(registry?.registrarFor("io.flutter.plugins.sharedpreferences.SharedPreferencesPlugin"));

完整的 class :

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"));
    }

}

之前打电话就可以了

SharedPreferences prefs = await SharedPreferences.getInstance();

此行说明您从哪里获得价值。

喜欢.,

SharedPreferences prefs = await SharedPreferences.getInstance();

String name = prefs.getString("Name");

这解决了我的问题

dependency_overrides: shared_preferences_android: 2.0.10