如何解决Error: Property 'buffer' cannot be accessed on 'ByteData?'报错

报错信息:
Error: Property 'buffer' cannot be accessed on 'ByteData?'
报错原因
该报错属于Dart空安全机制的常规校验:你当前操作的ByteData实例是可空类型ByteData?,在未确认实例非空的前提下,无法直接访问其buffer属性。
解决方法
根据你业务场景中ByteData?实例是否必然有值,可选择以下三种方案:
方案1:确认实例必然不为空时,使用非空断言运算符
!
示例代码:// 错误写法 ByteData? byteData = await rootBundle.load("assets/test.png"); Uint8List imgBytes = byteData.buffer.asUint8List(); // 修正写法 Uint8List imgBytes = byteData!.buffer.asUint8List();方案2:无法确认实例是否为空时,提前做空判断
示例代码:ByteData? byteData = await rootBundle.load("assets/test.png"); if (byteData != null) { Uint8List imgBytes = byteData.buffer.asUint8List(); // 后续业务逻辑 } else { // 自定义资源加载失败的兜底逻辑 }方案3:使用空感知运算符加默认值兜底
示例代码:// 当byteData为空时,默认返回空的Uint8List Uint8List imgBytes = byteData?.buffer.asUint8List() ?? Uint8List(0);
内容的提问来源于stack exchange,提问作者Loker Jakarta
相关产品推荐
相关产品推荐

