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
或者将dart版本该成兼容版本也行10 -
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)特性。
00 -
慕粉1469634287
2021-06-06
return _cache = Logger._internal();
不要用return,这里是赋值
00
相似问题