Dart空安全下从SharedPreferences读User的getter返回null报错如何解决
问题原因
该报错与空安全配置无关,是Dart语法对属性的getter、setter类型约束规则导致的:同一属性的getter返回值类型必须是setter参数类型的子类型。你当前的getter返回User?(可空用户类型),但对应setter的参数是User(非空用户类型),可空类型不属于非空类型的子类型,因此触发编译错误。
解决方案
根据你的业务需求可选以下两种修改方式:
方案1:修改setter参数类型为可空的
User?,和getter类型保持一致,同时补充空值对应的存储逻辑// 原setter写法(仅作参考) // set user(User value) { // sharedPreferences.setString("user", jsonEncode(value.toJson())); // } // 修改后的setter set user(User? value) { if (value == null) { // 赋值null时清除SharedPreferences中的对应缓存 sharedPreferences.remove("user"); } else { sharedPreferences.setString("user", jsonEncode(value.toJson())); } }该方案支持外部直接给user属性赋值null,和getter返回null的逻辑完全对应。
方案2:如果不需要外部修改user属性,直接移除setter,或将setter改为私有(属性名前加下划线),即可绕过getter、setter的类型匹配校验。
内容的提问来源于stack exchange,提问作者pb4now
相关产品推荐
相关产品推荐

