请稍等 ...
×

采纳答案成功!

向帮助你的同学说点啥吧!感谢那些助人为乐的人

Error: Field '_cache' should be initialized

class Logger {

  static Logger _cache;

  // 单利模式,使用工厂构造方法实现
  factory Logger() {
    if(_cache == null) {
      return _cache = Logger._internal();
    }
    return _cache;
  }

  // 命名构造方法
  Logger._internal();

}

报错
Error: Field ‘_cache’ should be initialized because its type ‘Logger’ doesn’t allow null.

它要求必须附初始值,那这个例子怎么改才能运行呢

正在回答 回答被采纳积分+3

3回答

CrazyCodeBoy 2021-06-07 09:04:47


https://img1.sycdn.imooc.com//60bd709800019d6d11760420.jpg或者将dart版本该成兼容版本也行

1 回复 有任何疑惑可以回复我~
bicbrv 2021-07-13 16:26:18
class Logger {
  static Logger? _cache;
  factory Logger(){
    // if(_cache==null){
    //   _cache = Logger._internal();
    // }
    return _cache ??= Logger._internal();
  }

  Logger._internal();

  void log(String msg){
    print(msg);
  }
}



https://stackoverflow.com/questions/67049107/the-non-nullable-variable-database-must-be-initialized

参考这个答案。

我试了下,这种方式也可以,不用改sdk版本号。充分利用dart新版本的non-nullable by default(NNBD)特性。

0 回复 有任何疑惑可以回复我~
慕粉1469634287 2021-06-06 17:20:32
return _cache = Logger._internal();

不要用return,这里是赋值

0 回复 有任何疑惑可以回复我~
问题已解决,确定采纳
还有疑问,暂不采纳
意见反馈 帮助中心 APP下载
官方微信