运行Flutter Web时出现预期SkDeletable类型值却得到Null的报错求解决方案
Flutter Web 触发
Expected a value of type 'SkDeletable', but got one of type 'Null' 解决方案 这个报错本质是Skia渲染引擎的绑定层拿到了空的渲染上下文或图像资源,结合你给出的依赖版本、纯UI项目的特征,按以下优先级排查基本就能定位解决:
1. 优先验证渲染模式兼容性
你使用的依赖版本都是2021年前后发布的旧版本,和新版本Flutter默认开启的CanvasKit(基于Skia的Web渲染模式)兼容性很差,是该报错的最高发原因:
- 启动调试时强制指定HTML渲染模式做验证:运行命令
flutter run -d chrome --web-renderer html- 如果切换到HTML模式后报错消失,即可确认是Skia渲染层的适配问题。
- 开发、生产构建全流程统一锁定渲染模式为HTML,不要使用默认的自动切换模式(自动模式会自动切到CanvasKit触发报错),生产构建时对应加上参数
--web-renderer html即可规避。
2. 排查图片类依赖的空值触发逻辑
你项目中使用的image_picker: ^0.7.4、image_cropper: ^1.4.0两个版本的Web端实现没有做Skia解码上下文的判空处理,很容易在图片资源为空时触发该报错:
- 检查所有图片相关逻辑:用image_picker选图、image_cropper裁剪后的返回值,必须做非空判断后再传递给Image控件渲染,禁止把空字节流、空文件路径直接传给渲染层。
- 如果需要使用CanvasKit渲染模式,需将两个图片依赖升级到适配Web Skia的稳定版本,不要继续使用0.7.x、1.4.x的老旧版本。
3. 排查UI组件的渲染上下文异常
结合纯UI项目的特征,可快速缩小问题范围:
- 打开Chrome开发者工具的异常断点,触发报错时查看调用栈,定位问题位置:如果栈顶指向Skia绑定层的图像解码逻辑,顺着栈往上找对应业务代码即可。
- 临时注释所有Bubble组件的渲染逻辑跑一遍验证,如果去掉Bubble后报错消失,说明是该旧版本组件在Skia模式下的画布初始化空值问题,升级Bubble到最新修复版本即可解决。
内容的提问来源于stack exchange,提问作者Hossein Asadi
相关产品推荐
相关产品推荐

