Flutter中SharedPreferences报MissingPluginException问题求助
问题描述
使用SharedPreferences时持续触发以下错误:
[ERROR:flutter/runtime/dart_vm_initializer.cc(41)] Unhandled Exception: MissingPluginException(No implementation found for method getAll on channel plugins.flutter.io/shared_preferences_android)
已尝试flutter clean、flutter upgrade、重新安装应用均无效,使用SharedPreferences.setMockInitialValues({})仅能临时绕过问题,但重启应用后所有存储值会被重置为null,并非长期解决方案。
附flutter doctor输出:
[✓] Flutter (Channel master, 3.7.0-27.0.pre.25, on Ubuntu 20.04.2 LTS 5.15.0-58-generic, locale en_IL)
[✓] Android toolchain - develop for Android devices (Android SDK version 33.0.0)
[✓] Chrome - develop for the web
[✓] Linux toolchain - develop for Linux desktop
[✓] Android Studio (version 2022.1)
[✓] VS Code (version 1.74.2)
[✓] Connected device (3 available)
[✓] HTTP Host Availability
• No issues found!
可行解决方案
锁定SharedPreferences依赖版本:master通道Flutter可能和最新版插件存在兼容性问题,在
pubspec.yaml中指定稳定版本,比如:dependencies: shared_preferences: ^2.2.2执行
flutter pub get后重新编译。重新生成Android平台绑定代码:
- 进入项目
android目录,执行./gradlew clean - 返回根目录执行
flutter pub get - 重新执行
flutter run安装应用
- 进入项目
修正初始化时机:不要在
main()开头直接调用SharedPreferences,先确保Flutter引擎初始化完成:void main() async { WidgetsFlutterBinding.ensureInitialized(); final prefs = await SharedPreferences.getInstance(); runApp(MyApp(prefs: prefs)); }切换到Flutter稳定通道:master通道为开发预览版,兼容性较差,执行以下命令切换后重新编译:
flutter channel stable flutter upgrade flutter clean flutter pub get清除设备应用缓存和数据:在设备应用管理中找到你的应用,清除缓存和数据后,重新安装应用。
检查AndroidManifest.xml配置:确认
AndroidManifest.xml中没有干扰插件注册的配置,比如异常的meta-data项,确保配置无冲突。
内容的提问来源于stack exchange,提问作者FelX3

