【问题标题】:List as optional constructor parameter is null in Dart列表作为可选构造函数参数在 Dart 中为空
【发布时间】:2020-08-01 19:45:26
【问题描述】:

在下面的例子中,为什么没有给构造函数传递参数时是myListnull

我将它声明为类中的空(可增长)列表。

class MyListClass {
  List myList = [];

  MyListClass({this.myList});
}

void main() {
  final obj = MyListClass();
  assert(obj.myList != null);
}

传递可选列表但默认为空列表的最佳方式是什么?

我知道您可以执行以下操作,但也许有更好的方法?

MyListClass({this.myList}) {
  this.myList ??= [];
}

日期: 这是预期的行为,如果没有根据this 给出值,null 是默认行为。

【问题讨论】:

  • 您没有将任何内容传递给将值定向到 myList 的构造函数,这就是为什么您得到 null(null == empty)
  • 好的,我想既然它是可选的,当没有传递参数时它应该保持不变。我更新了我的问题以找到解决此问题的最佳解决方案
  • 嗯。可能。我发布了一个 github 问题。
  • 然后发布指向该 GitHub 问题的链接

标签: list flutter dart constructor


【解决方案1】:

编辑:使用初始化器:

class MyListClass {
  List myList;

  MyListClass({List list}) : myList = list ?? [];
}

【讨论】:

  • 这会创建一个不可修改的列表,我想修改它
  • 可以修改但不能设置引用另一个列表,这不就是你想要的吗?
  • 刚试了一下,得到“未处理的异常:不支持的操作:无法添加到不可修改的列表”
  • 这是一个解决方案,但它有点冗长,如果你愿意,你不能传递空值。我仍然对我的示例没有按预期工作感到惊讶。我在 dart 上提交了一个 github 问题。
  • 我会接受这个答案,因为我的错误是this的预期行为
猜你喜欢
  • 2020-11-17
  • 1970-01-01
  • 1970-01-01
  • 2020-12-11
  • 2021-11-22
  • 2019-02-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多