不确定这是否是最好的方法,但我正在尝试基于一些过滤将单个列表转换为3个列表的列表,以创建视图模型。
由于过滤器(List.where
)可能返回null,我尝试实现null-aware(?)和if-null(??)运算符,但是IDE将其标记为Conditions must have a static type of 'bool'.
。
因此,基本上我将3个List<PropertyTask>
添加到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))),
]),
);
1条答案
按热度按时间jmo0nnb31#
这个列表永远不会为空,所以试图让代码识别空值会导致编译器将其误解为三元运算符。如果删除识别空值的代码,错误也会被删除。
如果输入的任何值的代码都不能为空(这不能; List documentation显示它不能返回null),那么尝试向它添加支持null的代码将导致编译器混乱。