【问题标题】:null safety issue for getter with if-statment带有 if 语句的 getter 的 null 安全问题
【发布时间】:2021-10-02 13:57:31
【问题描述】:

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

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

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

但我收到错误 “getter 'user' 的返回类型是 'User?'这不是其设置器“用户”的“用户”类型的子类型。”

我希望能够返回 null,但由于 null 安全性,编译器不允许我返回。

谁能告诉我这里缺少什么?:/

【问题讨论】:

标签: flutter dart dart-null-safety


【解决方案1】:

我想你的 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

【讨论】:

    猜你喜欢
    • 2011-02-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-05-25
    • 1970-01-01
    • 1970-01-01
    • 2015-09-15
    • 1970-01-01
    相关资源
    最近更新 更多