flutter 识别空运算符?无法识别

jhkqcmku  于 2022-12-19  发布在  Flutter
关注(0)|答案(1)|浏览(141)

不确定这是否是最好的方法,但我正在尝试基于一些过滤将单个列表转换为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))),
            ]),
);
jmo0nnb3

jmo0nnb31#

这个列表永远不会为空,所以试图让代码识别空值会导致编译器将其误解为三元运算符。如果删除识别空值的代码,错误也会被删除。
如果输入的任何值的代码都不能为空(这不能; List documentation显示它不能返回null),那么尝试向它添加支持null的代码将导致编译器混乱。

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))) 
                  .map((tf) => JobMasterEditTaskViewModel.fromDomain(tf)))), 
            List<JobMasterEditTaskViewModel> 
              .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))),
            ]),
);

相关问题