You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Flutter升级后SharedPreferences插件报类型不匹配异常求助

解决shared_preferences抛出的_InternalLinkedHashMap类型不匹配异常

这个问题我在升级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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.20 11:38:41