Flutter开发 - Null check operator used on a null value(flutter大量奇怪异常)

10,046 阅读1分钟

最近通过sentry平台,看到了很多奇怪的异常,有些异常甚至达到了百万级别,仔细去看才发现问题所在,报错是这样的:

_CastError
Null check operator used on a null value
change_notifier.dart in ChangeNotifier.notifyListeners at line 218

看到之后根据对应提示找到了代码,发现是notifyListeners报的,也就是说,在notifyListeners的时候,被通知的‘对象’已经被销毁了,这种情况出现的场景比较有限,博主这里出现的场景是倒计时。

那怎么解决这种奇怪的异常呢?最好的办法就是重写notifyListeners方法,然后在重写的notifyListeners中判断所要通知的widget的state的mouted状态是否是true,如果为false,则不执行,具体的操作是这样的:

  void notifyListeners() {
    if (widgetState.mounted) super.notifyListeners();
  }

这个_pageState一定要注意了,是widget传过来的,

需要写个属性:
//xxxxxx部分是要通知的widget的类名
State<xxxxxxxxxxxx> widgetState;
//在xxxxxxxxxxxx这个widget中对widgetState传入this即可。

另外还需要注意,在setState的时候也可能会出现类似问题,也可以通过判断mounted的方式来解决:

    if (mounted) {
    //要处理的操作
    }
    //可能出现的地方为dispose的时候,setState的时候

更多异常类型请查看:异常信息汇总