Flutter:SharedPreferences中String?无法赋值给String参数的解决咨询
报错原因是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
相关产品推荐
相关产品推荐

