使用 Flutter 动态加载资源

发布于 2025-01-09 18:37:08 字数 801 浏览 1 评论 0原文

我正在运行一个 Flutter 应用程序,其中需要显示一个产品列表。

我有一个资产文件夹(在 pubspec.yaml 中加载),其中包含我的某些产品图像。

如果不存在,我不想显示图像或占位符

尝试一:

Image buildImg() {
   var img = `assets/img/${product.id}.png`;
   if(File(img).existsSync()){
      return Image.asset(img);
   }else{
      return Image.asset('assets/img/placeholder.png');
   }
}

结果:条件始终为假

尝试二:

Image buildImg() async {
   try{
      var img = rootBundle.load(`assets/img/${product.id}.png`);
      return Image.memory(img.buffer.asUint8List());
   }catch (_){
      return Image.asset('assets/img/placeholder.png');
   }
}

结果:工作正常,但终端中出现很多警告。

有没有更好的方法来动态加载资源?谢谢

I'm running a Flutter application with a list of products need to be displayed.

I've an asset folders (loaded in pubspec.yaml) which contains certain of my product images.

I wan't to show the image or a placeholder if not exists

Attempt one :

Image buildImg() {
   var img = `assets/img/${product.id}.png`;
   if(File(img).existsSync()){
      return Image.asset(img);
   }else{
      return Image.asset('assets/img/placeholder.png');
   }
}

Result: condition is always false

Attempt two :

Image buildImg() async {
   try{
      var img = rootBundle.load(`assets/img/${product.id}.png`);
      return Image.memory(img.buffer.asUint8List());
   }catch (_){
      return Image.asset('assets/img/placeholder.png');
   }
}

Result: Working but a lot of warns in terminal.

Is there a better way to dynamically load assets ? Thank's

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

给我一枪 2025-01-16 18:37:08

图像小部件有一个错误生成器,当提供的路径无效时会调用该错误生成器,
只需使用此代码

Image.asset("image path.png" , errorBuilder: (context, error, stackTrace) => Image.asset('placeholder path.png'),),

the Image widget has an error builder which is called when the provided path is not valid,
simply use this code

Image.asset("image path.png" , errorBuilder: (context, error, stackTrace) => Image.asset('placeholder path.png'),),
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文