升级到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
相关产品推荐
相关产品推荐

