如何解决‘参数类型Uint8List?无法赋值给Uint8List’错误?
解决Uint8List?到Uint8List的类型不匹配问题
问题出在三元表达式的返回类型上:虽然用isDefinedAndNotNull判断了变量非空,但直接返回complaintSketch时,它的类型依然是Uint8List?,并没有自动转为非空类型。另外如果generatePatientConsultationDocument的对应参数要求非空Uint8List,你传null的分支也会触发类型不匹配。
方案1:参数允许传入null(参数类型为Uint8List?)
修改每个三元表达式的true分支,在变量后加!断言非空,这样返回的类型会变成Uint8List?,完全匹配参数要求:
await Printing.layoutPdf( onLayout: (PdfPageFormat format) async => (await generatePatientConsultationDocument( format, setupProfile, 'medical', complaintSketch.isDefinedAndNotNull ? complaintSketch! : null, bodyDiagramSketch.isDefinedAndNotNull ? bodyDiagramSketch! : null, rightHeadDiagramSketch.isDefinedAndNotNull ? rightHeadDiagramSketch! : null, leftHeadDiagramSketch.isDefinedAndNotNull ? leftHeadDiagramSketch! : null, )).save(), );
方案2:参数要求非空Uint8List
如果generatePatientConsultationDocument不允许参数传null,给空值分支提供默认的空Uint8List即可:
await Printing.layoutPdf( onLayout: (PdfPageFormat format) async => (await generatePatientConsultationDocument( format, setupProfile, 'medical', complaintSketch.isDefinedAndNotNull ? complaintSketch! : Uint8List(0), bodyDiagramSketch.isDefinedAndNotNull ? bodyDiagramSketch! : Uint8List(0), rightHeadDiagramSketch.isDefinedAndNotNull ? rightHeadDiagramSketch! : Uint8List(0), leftHeadDiagramSketch.isDefinedAndNotNull ? leftHeadDiagramSketch! : Uint8List(0), )).save(), );
简化写法
用Dart空安全的??运算符可以简化判断逻辑,效果和上面一致:
// 允许传null的场景,等价于直接写变量(但如果需要确保非空时转成Uint8List,还是要加!) complaintSketch! ?? null // 要求非空的场景,更简洁: complaintSketch ?? Uint8List(0)
替换后的完整代码:
await Printing.layoutPdf( onLayout: (PdfPageFormat format) async => (await generatePatientConsultationDocument( format, setupProfile, 'medical', complaintSketch ?? Uint8List(0), bodyDiagramSketch ?? Uint8List(0), rightHeadDiagramSketch ?? Uint8List(0), leftHeadDiagramSketch ?? Uint8List(0), )).save(), );
内容的提问来源于stack exchange,提问作者John Reaper
相关产品推荐
相关产品推荐

