Flutter升级后SharedPreferences插件报类型不匹配异常求助
这个问题我在升级Flutter后也碰到过,本质是Flutter升级后类型检查变得更严格,或者shared_preferences插件的类型处理逻辑和新版本SDK不兼容导致的。下面是几个亲测有效的解决步骤:
1. 升级shared_preferences到最新稳定版
首先确保你用的是插件的最新版本,很多这类类型兼容问题官方已经修复了。在终端运行:
flutter pub upgrade shared_preferences
之后执行flutter pub get更新依赖。
2. 显式处理Map类型转换
报错的核心原因是json.decode()返回的_InternalLinkedHashMap无法直接强转为Map<String, Object>。你需要在存/取数据时显式做类型转换:
存数据时提前转换
把要存储的Map先转换成Map<String, Object>类型再序列化:
import 'package:shared_preferences/shared_preferences.dart'; import 'dart:convert'; // 正确写法:显式转换类型 var userData = Map<String, Object>.from({ 'name': 'Tony', 'age': 30, }); final prefs = await SharedPreferences.getInstance(); await prefs.setString('user_data', json.encode(userData));
取数据时安全转换
如果已经存了旧数据,取的时候用Map<String, Object>.from()来安全转换:
final prefs = await SharedPreferences.getInstance(); final userDataStr = prefs.getString('user_data'); if (userDataStr != null) { // 先转成Map再显式转换类型 final userData = Map<String, Object>.from(json.decode(userDataStr) as Map); // 使用userData... }
3. 清理项目缓存
有时候旧的编译缓存会残留奇怪的类型问题,执行以下命令清理后重新构建:
flutter clean flutter pub get flutter run
4. 检查Flutter SDK与插件兼容性
如果你刚升级到Flutter 3.x及以上版本,要确认shared_preferences的版本支持当前SDK。可以查看插件的pubspec.yaml里的sdk约束,确保和你的Flutter版本匹配。
内容的提问来源于stack exchange,提问作者Tony Danilov
相关产品推荐
相关产品推荐

