Dart报错:参数类型'List<EntryJob> Function(List<Entry>?, List<Job>?)'无法赋值
报错原因
这是Dart空安全规则下的函数类型不匹配错误:
你传入的函数接收的是两个可空类型参数List<Entry>?、List<Job>?,但接收这个函数的位置要求参数为非可空类型List<Entry>、List<Job>,两者的函数签名不一致,触发编译校验报错。
修复方案
根据你的业务场景任选一种即可:
方案1:调整调用方的参数类型定义
如果业务逻辑里确实可能传入null,就把调用位置要求的函数参数改为可空类型,给List<Entry>和List<Job>都加上?后缀即可。
// 修改前的调用方参数定义 List<EntryJob> Function(List<Entry>, List<Job>) targetParam // 修改后 List<EntryJob> Function(List<Entry>?, List<Job>?) targetParam
方案2:调整自定义函数的参数为非可空
如果你的函数逻辑本身不允许参数为null,就去掉自定义函数参数后的?,和调用方要求的类型对齐。
// 修改前的函数定义 List<EntryJob> combineEntryAndJob(List<Entry>? entries, List<Job>? jobs) { // 业务逻辑 } // 修改后 List<EntryJob> combineEntryAndJob(List<Entry> entries, List<Job> jobs) { // 业务逻辑 }
方案3:包装闭包做非空兼容
如果调用方不会传入null,但你需要保留函数的可空参数定义,可以用闭包包装一层做非空断言再传入。
// 传入位置的代码示例 (entries, jobs) => yourFunction(entries!, jobs!)
注意:该方案仅适用于你100%确定运行时参数不会为null的场景,否则会触发运行时空异常。
内容的提问来源于stack exchange,提问作者Muhammad Saqib Aziz
相关产品推荐
相关产品推荐

