Dart 具有未初始化的最终类变量的构造函数

Dart 具有未初始化的最终类变量的构造函数,dart,constructor,final,Dart,Constructor,Final,我有这门课: class Entry { final String id; final List<ListEntry> listEntries; Entry({this.listEntries}): id = Uuid().v4(); Entry.withId({this.id, this.listEntries}); } // create new class instance var e = Entry(); 类条目{ 最终字符串id; 最后

我有这门课:

class Entry {
  final String id;
  final List<ListEntry> listEntries;

  Entry({this.listEntries}):
        id = Uuid().v4();

  Entry.withId({this.id, this.listEntries});
}
// create new class instance
var e = Entry();
类条目{
最终字符串id;
最后名单名单;
条目({this.listEntries}):
id=Uuid().v4();
条目.withId({this.id,this.listEntries});
}
//创建新的类实例
var e=Entry();

现在,当我调用
e.listEntries
上的任何方法时,我将得到一个NPE,因为它没有初始化。如果没有提供构造函数参数,有没有办法使其默认为空列表?

您可以使用工厂构造函数:

class Entry {
  final String id;
  final List<String> listEntries;

  factory Entry({List<String> listEntries}) {
    return Entry._(listEntries ?? []);
  }

  Entry._(this.listEntries):
        id = Uuid().v4();

  Entry.withId({this.id, this.listEntries});
}
类条目{
最终字符串id;
最后名单名单;
工厂条目({List listEntries}){
返回条目.(列表条目??[]);
}
条目.(this.listEntries):
id=Uuid().v4();
条目.withId({this.id,this.listEntries});
}

您可以使用工厂构造函数:

class Entry {
  final String id;
  final List<String> listEntries;

  factory Entry({List<String> listEntries}) {
    return Entry._(listEntries ?? []);
  }

  Entry._(this.listEntries):
        id = Uuid().v4();

  Entry.withId({this.id, this.listEntries});
}
类条目{
最终字符串id;
最后名单名单;
工厂条目({List listEntries}){
返回条目.(列表条目??[]);
}
条目.(this.listEntries):
id=Uuid().v4();
条目.withId({this.id,this.listEntries});
}

您可以在初始值设定项列表中初始化字段,而不是使用
this.ListEntries
(初始化形式)

类条目{
最终字符串id;
最后名单名单;
条目({List listEntries})
:this.withId(id:Uuid().v4(),listEntries:listEntries);
Entry.withId({this.id,this.listEntries})
:listEntries=listEntries???[];
}
//创建新的类实例
var e=Entry();

在这里,我重复使用
项。withId
构造函数,因此我只需编写一次。

您可以在初始值设定项列表中初始化字段,而不是使用
this.ListEntries
(初始化形式)

类条目{
最终字符串id;
最后名单名单;
条目({List listEntries})
:this.withId(id:Uuid().v4(),listEntries:listEntries);
Entry.withId({this.id,this.listEntries})
:listEntries=listEntries???[];
}
//创建新的类实例
var e=Entry();
在这里,我重用了
条目.withId
构造函数,因此我只需编写一次