有没有什么方法可以控制Image.network()启动的异常,以便为其提供默认的AssetImage?

推荐答案

这取决于您的用例,但一种方法是使用FadeInImage,它的属性为img,用于要加载的图像,以及placeholder,用于占位符

FadeInImage(image: NetworkImage(url), placeholder: AssetImage(assetName)

您还可以监听,直到加载图像,并自己显示占位符,直到读取图像解析为止.

pseudo code

bool _loaded = false;
var img = Image.network(src);
var placeholder = AssetImage(assetName)

@override
void initState() {
  super.initState();
  img.image.resolve(ImageConfiguration()).addListener((i, b) {
    if (mounted) {
      setState(() => _loaded = true);
    }
  });     
}

@override
Widget build(BuildContext context) { 
  return YourWidget(
    child: _loaded ? img : placeholder,
  );
}

Flutter相关问答推荐

Flutter日期和时间 Select 器未显示

为什么在Flutter中使用firebase数据库时获取引用时会划掉引用?

当仅点击一行时,所有行都被选中

在Flutter 中将参数从一个类传递到另一个类

在背景图像上排列定位徽标

在Flutter 中创建自定义形状

当我转到其他屏幕并按下后退按钮时,屏幕将不会刷新

Flutter Dismissible 不会在 startToEnd 滑动时被关闭

Flutter开发中,如何通过'nfc_manager'插件在Android设备上避免默认的New Tag Scanned弹出窗口?

Flutter 应用程序在启动画面冻结(java.lang.RuntimeException:无法启动活动 ComponentInfo)

有没有办法在没有收缩包装的情况下在列中使用 ListView.Builder?

Flutter 错误:OutletListModel类型的值不能分配给List类型的变量?

Flutter/Dart 返回_Future的实例而不是实际的字符串值

如何根据字符串值动态构建和显示小部件?

Flutter:制作自定义小部件的最佳做法是什么?

使用 onPressed 切换到另一个屏幕无法正常工作

将一个 Flutter 应用程序集成到另一个 Flutter 应用程序中

Flutter 中父容器顶部的 Gridview 间距额外区域

我想在数组中添加项目

参数类型MaterialPageRoute不能分配给参数类型String