You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Flutter使用blurhash_dart编码图片报文件不存在错误如何解决?

问题根源

你使用File类直接读取Flutter项目内的assets资源是错误的:Flutter项目内的静态资源在打包后会被封装到应用的专属资源包中,不存在本地文件系统的普通文件路径,所以会抛出找不到文件的报错。blurhash_dart官方示例中使用File读取的是设备本地存储的用户文件,不适用项目内置静态资源的场景。

正确实现方案
  1. 导入Flutter服务包,使用rootBundle加载静态资源,同时将编码逻辑从build方法中移出(build方法会多次触发重绘,重复编码会造成不必要的性能损耗),建议放在initState中异步处理:
// 导入必要依赖
import 'package:flutter/services.dart';
import 'package:image/image.dart' as img;
import 'package:blurhash_dart/blurhash_dart.dart';

// 在State类中实现异步加载逻辑
class _YourWidgetState extends State<YourWidget> {
  String? blurHashStr;

  @override
  void initState() {
    super.initState();
    _generateBlurHash();
  }

  Future<void> _generateBlurHash() async {
    // 替换为你的资源路径,和pubspec.yaml中声明的路径完全一致
    final byteData = await rootBundle.load('assets/daytime/midday.jpg');
    final fileBytes = byteData.buffer.asUint8List();
    final img.Image? decodedImage = img.decodeImage(fileBytes);
    final blurHash = BlurHash.encode(decodedImage!, numCompX: 4, numCompY: 3);
    setState(() {
      blurHashStr = blurHash.hash;
    });
  }

  @override
  Widget build(BuildContext context) {
    // 你的页面布局代码
  }
}
额外检查项

如果修改后仍有报错,请逐一确认以下配置:

  • pubspec.yaml中assets节点必须嵌套在flutter节点下,缩进严格为2个空格,每个资源路径前的-后需保留1个空格,路径缩进比assets多2个空格
  • 资源路径的大小写和实际文件、文件夹的大小写完全匹配(Android、Linux等平台文件系统大小写敏感,路径大小写不一致会触发报错)
  • 修改pubspec.yaml后必须执行flutter pub get,然后重启应用生效,热重载不会更新资源配置

内容的提问来源于stack exchange,提问作者Mohammed Bekele

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.30 23:45:04