Dart空安全下构造函数可选命名参数初始化复杂对象方案咨询
Dart空安全下构造函数可选命名参数初始化复杂对象的最优方案
你可以将可选命名参数声明为可空类型,再在初始化列表中通过空合并运算符设置 fallback 默认值,既不需要将类成员设为可空,也支持外部自定义传参,示例代码如下:
class MyClass { String aString; DateTime aDate; MyClass({ this.aString = '', DateTime? aDate, }) : aDate = aDate ?? DateTime.now(); }
该实现的核心优势:
- 类的成员
aDate始终为非空类型,符合你不想设置可空的要求 - 支持两种实例化方式,完全覆盖使用场景:
- 使用默认时间:
var c = MyClass(aString: 'bla bla'); - 传入自定义时间:
var c = MyClass(aString: 'bla bla', aDate: DateTime(2021, 9, 20));
- 使用默认时间:
- 无需在实例化后额外赋值,对于大量从远程服务获取的复杂类场景,只需要给每个需要默认值的非const类型参数套用这个模式即可,大幅减少冗余赋值代码。
内容的提问来源于stack exchange,提问作者ThommyB
相关产品推荐
相关产品推荐

