什么是 NoSuchMethodError 以及如何修复它?

问题描述 投票:0回答:2

我有一些代码,当我运行它时会产生错误,说:

NoSuchMethod:在 null 上调用方法“XYZ”

这是什么意思,我该如何解决?

flutter dart null nosuchmethoderror nosuchmethod
2个回答
24
投票

为什么会出现这个错误?

例子

作为真实世界的对比,刚刚发生的是这段对话:

嘿,汽车油箱里还剩多少油?

你在说什么,我们没有车。

这正是您的程序中发生的事情。你想调用像

_car.getGasLevel();
这样的函数,但是没有汽车,变量
_car
null
.

很明显,在你的程序中它可能不是汽车。它可以是列表或字符串或其他任何东西。

技术讲解

您正在尝试使用

null
的变量。要么你已经明确地将它设置为
null
,要么你根本就没有设置它,默认值是
null

像任何变量一样,它可以传递给其他函数。您收到错误的地方可能不是源头。你将不得不从实际的

null
值到它最初的来源,找到问题是什么以及解决方案可能是什么。

null
可以有不同的含义:未设置为另一个值的变量将是
null
,但有时程序员会故意使用 null 值来表示没有值。数据库有可为空的字段,JSON 有缺失值。缺失的信息确实可能be 信息本身。例如,当用户说是时,变量
bool userWantsPizzaForDinner;
可能用于
true
,当用户拒绝时为
false
,而当用户尚未选择某些东西时,它可能仍然是
null
。这不是错误,它是有意使用的,需要相应地处理。

我该如何解决?

找到它

使用错误消息附带的堆栈跟踪来准确找出错误发生在哪一行。然后在该行设置一个断点。当程序遇到断点时,检查变量的所有值。其中一个是

null
,找出哪个。

修复它

一旦你知道它是哪个变量,找出它是如何最终成为

null
的。它从哪里来的?这个值是不是一开始就没有设定的?该值是另一个变量吗? that 变量是如何获得它的价值的。这就像一行面包屑,您可以一直跟随,直到到达某个点,您发现某个变量从未设置过,或者您可能到达某个点,您发现某个变量被有意设置为
null
。如果它是无意的,只需修复它。将其设置为您希望它具有的值。如果是故意的,那么您需要在程序中进一步处理它。也许你需要另一个
if
来为这个案例做一些特别的事情。如有疑问,您可以询问故意将其设置为
null
他们想要实现的目标的人。


-1
投票

只是您尝试从类访问的变量/函数不存在

someClass.xyz();

上面会报错

NoSuchMethod: the method 'xyz' was called on null

因为班级

someClass
不存在

以下将正常工作

// SomeClass created
// SomeClass has a function xyz

class SomeClass {
  SomeClass();

  void xyz() {
    print('xyz');
  }
}

void main() {
  
  // create an instance of the class
  final someClass = SomeClass();
  
  // access the xyz function
  someClass.xyz();
}
© www.soinside.com 2019 - 2024. All rights reserved.