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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 21:48:02