Flutter错误:The method ‘[]’ was called on null

  • 发表于
  • flutter

The method '[]' was called on null

对Widget进行赋值时出现这个错误,表现为界面初始显示网络数据请求未完成前报错,一旦数据请求与赋值成功后界面又刷新到正常。从提示看是数组初始化和渲染之间的问题,检查了Widget赋值长度是6,但是json数组长度不是6,于是尝试截取数组:

list.sublist(0, 6);

以为可行,结果证明问题依旧。但错误稍有不同,原来是基于GridView的错误,现在错误层级变成了ListView。

示例Code:

return new Expanded(
child: ListView.builder(
padding: new EdgeInsets.all(8.0),
itemExtent: 20.0,
itemCount: widget.usernames.length,
itemBuilder: (BuildContext context, int index){
return Text("Bank ${widget.usernames[index] ?? " "}");
}
),
);

NoSuchMethodError: The getter 'length' was called on null

证明和预想的一样,是数据初始化和渲染造成。于是在国个论坛看到一个ask

如果您使用“ widget.usernames.length”之类的构造,则可能在两个地方出错:

  • when widget = null
  • when widget.username = null

您不能在空对象上调用方法和属性。这就是为什么您会收到此错误。因此,在调用widget.usernames.length之前,必须确保两种情况均不会发生。如何完成以及是否确实需要检查取决于程序的其余部分。一种检查方法是:

return widget?.username?.length ?? 0;

于是马上尝试该方法,问题解决!