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

升级到Flutter 2.1后SharedPreferences.setString传null报错的最优解决方案

根因分析

Flutter 2.1默认开启Dart空安全特性,配套升级的shared_preferences 2.0+版本对所有存储方法的入参做了非空校验,setString方法的value参数要求必须非空,传入null时就会触发你遇到的参数异常。旧版未适配空安全的shared_preferences无该校验逻辑,因此传null不会报错。

最优解决方案

无需修改上层调用逻辑,直接调整setLanguage方法内部的实现,根据入参是否为null做分支处理:如果传入null,代表需要清空已存储的语言配置,调用remove方法删除对应存储项;非空时再调用setString执行存储操作。

修改后的代码如下:

/// 存储用户语言到SharedPreferences
static Future<bool> setLanguage(String? value) async {
  final SharedPreferences prefs = await SharedPreferences.getInstance();
  if (value == null) {
    return prefs.remove(_language);
  }
  return prefs.setString(_language, value);
}

方案优势

  • 完全兼容旧的调用逻辑,上层传入null的场景无需做任何调整
  • 明确入参类型为String?、返回值为Future<bool>,符合空安全编码规范,编译阶段即可排查类型不匹配问题,也方便上层判断操作是否执行成功

内容的提问来源于stack exchange,提问作者Zeone line

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.19 12:06:00