【发布时间】:2022-12-16 23:10:44
【问题描述】:
不确定这是否是最好的方法,但我正在尝试根据一些过滤将单个列表转换为 3 个列表的列表以创建视图模型。
由于过滤器 (List.where) 可能返回 null,因此我正在尝试实现 null-aware (?) 和 if-null (??) 运算符。但是,这会被 IDE 标记为 Conditions must have a static type of 'bool'.。
所以基本上我将 3 List<PropertyTask>s 添加到 List<List<PropertyTask>>,其中每个 List<PropertyTask> 都是应用于初始 List<PropertyTask> 的过滤器。
我的代码如下所示:
factory JobMasterEditViewmodel.fromDomain(JobMaster master)
=> JobMasterEditViewmodel(
tasks: master.tasks == null
? null
: List<List<JobMasterEditTaskViewModel>>
.from([List<JobMasterEditTaskViewModel>
.from(((List<PropertyTask>
.from(master.tasks.where((t)
=> t.taskType == PropertyTaskTypes.always)))? // null-aware
.map((tf) => JobMasterEditTaskViewModel.fromDomain(tf))?) ?? []), // if-null
List<JobMasterEditTaskViewModel> // from here on without null-awareness
.from(List<PropertyTask>
.from(master.tasks.where((t)
=> t.taskType == PropertyTaskTypes.inventory))
.map((tf) => JobMasterEditTaskViewModel.fromDomain(tf))),
List<JobMasterEditTaskViewModel>
.from(List<PropertyTask>
.from(master.tasks.where((t)
=> t.taskType == PropertyTaskTypes.periodically))
.map((tf) => JobMasterEditTaskViewModel.fromDomain(tf))),
List<JobMasterEditTaskViewModel>
.from(List<PropertyTask>
.from(master.tasks.where((t)
=> t.taskType == PropertyTaskTypes.onRequest))
.map((tf) => JobMasterEditTaskViewModel.fromDomain(tf))),
]),
);
【问题讨论】:
-
是否标记了 if-null?哪个特定的代码部分会被 IDE 标记?
-
(List<PropertyTask>.from(master.tasks.where((t) => t.taskType == PropertyTaskTypes.always)))有错误文本。?) ?? []中的)标记Expected to find ':'.,这是由于错误地将?理解为条件而不是 null-aware
标签: flutter dart dart-null-safety