带有 if 语句的 getter 的 null 安全问题

null safety issue for getter with if-statment

我正在尝试使用代码从 sharedPreferances 中检索用户数据:

User? get user {
    String? u = sharedPreferences.getString("user");

    if (u == null) {
       return null;
    } else {
       return User.fromJson(jsonDecode(u));
    }
}

但我收到错误 “getter 'user' 的 return 类型是 'User?',它不是该类型的子类型'User' setter 'user'."

我希望能够 return null 但编译器不允许我这样做,因为 null 安全。

有人可以告诉我我在这里缺少什么吗?:/

我想你的 setter 的类型是 User ,它不能为空,但是你的 getter 是 User? ,它可以为空,即类型不同。并且编译器坚持 setter 和 getter 应该具有相同的类型。

class User {
  
}

class Foo {
  
  set user(User user) {
    
  }
  
  User? get user {
    return null;
  }
}

因此,解决方法是对 setter 和 getter 使用可空或不可空类型。

  set user(User? user) {
    
  }
  
  User? get user {
    return null;
  }

Try it on Dartpad