Error: Field '_cache' should be initialized

来源:5-9 带你揭开Flutter中的面向对象(工厂构造方法)

诺巴蒂

2021-06-05

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回答

CrazyCodeBoy

2021-06-07


//img.mukewang.com/60bd709800019d6d11760420.jpg或者将dart版本该成兼容版本也行

1
0

bicbrv

2021-07-13

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
0

慕粉1469634287

2021-06-06

return _cache = Logger._internal();

不要用return,这里是赋值

0
0

Flutter从入门到进阶 实战携程网App 一网打尽核心技术

解锁Flutter开发新姿势,,系统掌握Flutter开发核心技术。

4788 学习 · 3270 问题

查看课程