请稍等 ...
×

采纳答案成功!

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

你好这个判断会报错,已经加了空安全适配 ,报这个未被初始化 这个是为啥呢?

图片描述

你好这个判断会报错,已经加了空安全适配 ,报这个未被初始化 这个是为啥呢?我查了一下,dart也不支持像kotlin那样去判断是否被初始化,该怎么办呢。

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

2回答

weixin_慕前端4492656 2022-04-23 10:36:43

late关键字修饰的_logger属性,为Logger类型,它是非空类型,只不过延迟到后面某个时间进行初始化赋值。

_logger既然是非空属性,那么代码里出现_logger==null当然会报错。

你可以将Logger类型定义改为Logger?类型,带?的类型表示它修饰的属性可以为null。

0 回复 有任何疑惑可以回复我~
CrazyCodeBoy 2022-03-29 13:29:38

可以参考下下面的写法修改下:

  static HiCache? _instance;

  static HiCache getInstance() {
    if (_instance == null) {
      _instance = HiCache._();
    }
    return _instance!;
  }

0 回复 有任何疑惑可以回复我~
  • 提问者 慕田峪0044676 #1
    这样是对的,可以运行,没有问题,那工厂构造方法算怎么回事呢?工厂构造方法用不了了是吗?
    回复 有任何疑惑可以回复我~ 2022-03-29 13:46:20
  • 提问者 慕田峪0044676 #2
    /// 工厂构造方法
    class Logger {
      static Logger? _logger;
    
      factory Logger() {
        if (_logger == null) {
          _logger = Logger._create();
        }
        return _logger!;
      }
    
      static Logger getInstance(){
        if (_logger == null) {
          _logger = Logger._create();
        }
        return _logger!;
      }
    
      Logger._create();
    
      void log(String msg) {
        print(msg);
      }
    }
    我明白了 这样也是可以的,谢谢
    回复 有任何疑惑可以回复我~ 2022-03-29 13:52:36
  • 嗯,是的。
    回复 有任何疑惑可以回复我~ 2022-03-30 10:21:19
问题已解决,确定采纳
还有疑问,暂不采纳
意见反馈 帮助中心 APP下载
官方微信