【问题标题】:NoSuchMethodError: The getter 'length' was called on nullNoSuchMethodError:在 null 上调用了 getter 'length'
【发布时间】:2018-12-03 03:29:48
【问题描述】:

所以目前我正在使用 Flutter 构建应用程序,这对我来说还是个新事物,我被那个标题中的那个例外困住了。

问题是当我尝试在 ListView.builder 中调用“widget.usernames.length”时,如果它为 null,它将返回该异常,而当有数据时则没有异常。

我想要完成的是 get Length 函数应该返回 null 或 0 值,以便在没有数据时 ListView 不会显示任何内容。

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] ?? " "}");
      }
  ),
);

我已经试过了

itemCount: widget.usernames.length ?? 0

但还是没有成功。

编辑**

感谢 Jeroen Heier,这段代码运行良好。

var getUsernameLength = 0 ;
if(widget.usernames == null){
  return getUsernameLength;
}else{
  return widget.usernames.length;
}

【问题讨论】:

  • 你应该检查 widget.usernames == null
  • 实际上该代码与 if-else 语句配合得很好

标签: flutter dart isnull


【解决方案1】:

如果您使用“widget.usernames.length”之类的结构,则编程代码可能会在两个地方失败:

  • 当小部件 = null
  • 当 widget.username = null(你的情况)

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

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

【讨论】:

  • 感谢指导
  • @RémiRousselet 是的,这实际上更简单更好
【解决方案2】:

widget.usernames.length 似乎只是声明了。但未初始化或未分配任何值。所以它抛出了一个空错误。

您应该为 widget.usernames.length 赋值为List<int> widget.usernames.length = [1,4,5,7]; 或根据要求从父级传递数据。

还可以检查null

  itemCount: widget.usernames.length != null ? widget.usernames.length : 0;

【讨论】:

    猜你喜欢
    • 2020-06-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-07-21
    • 2021-07-18
    • 2020-12-26
    相关资源
    最近更新 更多