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

Flutter:SharedPreferences中String?无法赋值给String参数的解决咨询

解决方案:SharedPreferences读取JSON时的类型不匹配问题

报错原因是prefs.getString(key)返回String?类型(可能为null),但json.decode要求传入非null的String参数,以下是几种可行的解决方式:

1. 显式处理null场景(推荐)

先获取值并判断是否为null,根据业务需求返回默认值或抛出异常,避免潜在的空指针崩溃:

class SharedPref {
  Future<dynamic> read(String key) async {
    final prefs = await SharedPreferences.getInstance();
    final String? storedValue = prefs.getString(key);
    
    if (storedValue == null) {
      // 可选处理:返回null、空JSON对象,或抛出异常
      return null;
      // 或者抛出异常:throw Exception('未找到key为$key的存储内容');
    }
    
    return json.decode(storedValue);
  }
}

2. 空断言运算符(仅确定key必然存在时使用)

如果你能保证该key一定存在于SharedPreferences中,不会返回null,可以用!强制转换类型,但如果实际为null会直接触发崩溃,需谨慎:

class SharedPref {
  Future<dynamic> read(String key) async {
    final prefs = await SharedPreferences.getInstance();
    return json.decode(prefs.getString(key)!);
  }
}

3. 空合并运算符提供默认JSON串

如果希望key不存在时返回一个合法的默认JSON结构(比如空对象),可以用??运算符指定默认值:

class SharedPref {
  Future<dynamic> read(String key) async {
    final prefs = await SharedPreferences.getInstance();
    // 不存在时用空JSON对象作为默认值
    return json.decode(prefs.getString(key) ?? '{}');
  }
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.16 17:04:56