【问题标题】:How to declare a List type property for a class correctly in Dart?如何在 Dart 中正确声明类的 List 类型属性?
【发布时间】:2021-04-12 18:51:07
【问题描述】:

我是 Flutter 的新手,并试图声明一个文件夹类,其中一个属性是子文件夹列表。我无法得出正确的声明,语言给了我各种错误。有人可以帮我解决这个问题吗?

class Folder {
  final int id;
  final String title;
  final List<Folder> children;

  Folder ({
    this.id = 0,
    this.title = '',
    this.children
  });

  factory Folder.fromJson(Map<String, dynamic> parsedJson) {
    Iterable i = parsedJson['children'];

    return new Folder(
        id: parsedJson['id'] ?? '',
        title: parsedJson['title'] ?? '',
        children: List<Folder>.from(i.map((model) => Folder.fromJson(model)))
    );
  }
}

这给了我children 属性的以下错误:参数'children' 不能具有'null' 的值,因为它的类型,但隐含的默认值是'null'。

有时文件夹没有子文件夹,所以我不想创建 @required 参数,只是一个可选参数。

【问题讨论】:

    标签: flutter dart


    【解决方案1】:

    我猜你使用的是最新版本的 Dart 并启用了 null-safety ?
    如果是这种情况,请以这种方式声明您的 children var

    List<Folder>? children;
    

    应该可以解决问题。

    另一个解决方案是更新您的构造函数

      Folder ({
        this.id = 0,
        this.title = '',
        this.children = []
      });
    

    【讨论】:

    • 感谢@FDuhen,我总是忘记 Dart 是如何从 Swift 中获取东西的。 :) 那行得通,但是只有声明 this.children = [] 给出 可选参数的默认值必须是常量。
    • 它需要是this.children = const [](或者children可以声明为late,或者children可以通过初始化列表显式初始化)。
    猜你喜欢
    • 2021-06-06
    • 1970-01-01
    • 2020-10-07
    • 1970-01-01
    • 1970-01-01
    • 2014-09-24
    • 1970-01-01
    • 2017-06-12
    • 1970-01-01
    相关资源
    最近更新 更多