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