Flutter 颤振如何处理Image.network错误(如404或错误的url)
当url错误或目标指向404时,如何处理Flutter 颤振如何处理Image.network错误(如404或错误的url),flutter,http-status-code-404,Flutter,Http Status Code 404,当url错误或目标指向404时,如何处理Image.network 例如尝试 Image.network('https://image.tmdb.org/t/p/w92') 不要使用Network.image使用NetworkImageWithRetry 例如: var avatar = Image( image: NetworkImageWithRetry('http://example.com/avatars/123.jpg'), ); 更新:看看使用内置方法的新精确方法,@Nir
Image.network
例如尝试
Image.network('https://image.tmdb.org/t/p/w92')
不要使用
Network.image
使用NetworkImageWithRetry
例如:
var avatar = Image(
image: NetworkImageWithRetry('http://example.com/avatars/123.jpg'),
);
更新:看看使用内置方法的新精确方法,@Niraj Phutane回答说,它不需要插件
旧答案 我建议使用,它提供了添加占位符图像的选项,并且在404或403的情况下还提供了一个错误小部件
CachedNetworkImage(
图像URL:“http://via.placeholder.com/350x150",
占位符:(上下文,url)=>new CircularProgressIndicator(),
errorWidget:(上下文、url、错误)=>新图标(Icons.error),
),
我使用它就像
字符串url=
"https://images.unsplash.com/photo-15856192219-dd823a86ebc5?ixlib=rb-1.2.1&ixid=eyjhcbfawqiojeymdd9&auto=format&fit=crop&w=3334&q=80“;
试一试{
返回CachedNetworkImage(
useOldImageOnUrlChange:true,
imageUrl:url,
占位符:(上下文,url)=>CircularProgressIndicator(),
errorWidget:(上下文、url、错误){
返回图像(
图像:AssetImages(图像位置),
);
},
);
}捕获(e){
返回图像(
图像:AssetImages(图像位置),
);
}
为了安全起见,我们使用了捕手
注意:您可能必须声明CachedNetworkImage的实例,这很奇怪,但您无法使用Image.Provider轻松正确地处理错误。 使用这个方便的软件包: 然后在代码中:
backgroundImage: AdvancedNetworkImage(
"YOUR IMAGE URL",
fallbackAssetImage: "YOUR DEAULT ASSERT IMAGE eg:assets/default.png"
)
您可以使用
ImageStream
来处理错误
class CustomProductImage extends StatelessWidget {
final String image;
const CustomProductImage({Key key, this.image}) : super(key: key);
@override
Widget build(BuildContext context) {
return buildWidget(image);
}
}
Widget buildWidget(String url) {
Image image = Image.network(url, width: 50,height: 50,);
final ImageStream stream = image.image.resolve(ImageConfiguration.empty);
stream.addListener(ImageStreamListener((info, call) {
//you can also handle image loading
//example: loading = false;//that's mean image is loaded
},
onError: (dynamic exception, StackTrace stackTrace) {
// print('enter onError start');
// print(exception);
// print(stackTrace);
// print('enter onError end');
}));
return image;
}
我也有同样的问题,但是,我使用FadeInImage类的属性“imageErrorBuilder”解决了这个问题 这里有一个链接: 该示例适用于Image.network(),但也适用于FadeInImage 这是我的密码:
FadeInImage(
imageErrorBuilder: (BuildContext context, Object exception, StackTrace stackTrace) {
print('Error Handler');
return Container(
width: 100.0,
height: 100.0,
child: Image.asset('assets/img/no_disponible.jpg'),
);
},
placeholder: AssetImage('assets/img/loading.gif'),
image: NetworkImage(product.getImg()),
fit: BoxFit.cover,
height: 100.0,
width: 100.0,
),
例如,如果页面的方向不存在,将执行imageErrorBuilder的功能
我使用的是Flatter 1.20.1我使用errorBuilder处理了与404相关的网络映像问题
Image.network('Your image url...',
errorBuilder: (BuildContext context, Object exception, StackTrace stackTrace) {
return Text('Your error widget...');
},
),
当您在加载图像时发现404或任何其他错误时,可以显示来自资产的图像 我所做的是:
FadeInImage(
image: NetworkImage("imageUrl"),
placeholder: AssetImage(
"assets/images/placeholder.jpg"),
imageErrorBuilder:
(context, error, stackTrace) {
return Image.asset(
'assets/images/error.jpg',
fit: BoxFit.fitWidth);
},
fit: BoxFit.fitWidth,
)
检查
imageErrorBuilder
属性。我使用了基本图像小部件,并为错误添加了一个错误生成器,为加载状态添加了一个leadingBuilder,为我使用NetworkImageWithRetry的实际图像添加了一个leadingBuilder,这样它将多次尝试加载图像,如果无法加载图像,最后会给您一个错误
Image(
image: NetworkImageWithRetry(
'http://ImageUrl.png',),
errorBuilder: (context, exception, stackTrack) => Icon(Icons.error,),
loadingBuilder: (context, exception, stackTrack) => CircularProgressIndicator(),
)
我想应该允许的,但是我自己还没有仔细研究过。你不需要使用以Dart 2.0开头的
new
关键字NetworkImageWithRetry
当你出现404错误时,NetworkImageWithRetry
做什么?@krupeshAnadkat将flatter\u image:^1.0.0
添加到你的pubspek.yaml
file@krupesh-anadkat还添加导入导入“软件包:flatter_image/network.dart”代码>@JenJose你考虑过AutomaticEpaLiveClientMixin吗?将它添加到包装器类中,它将保持状态。或者,如果是ListView,您可以将其配置为保持状态:但如果您确实需要使用图像缓存(即precacheImage),我相信有一种方法可以将precacheImage与字节加载相结合。我正考虑就此提出一个问题。CachedNetworkImage
导致应用程序在状态代码为404CachedNetworkImage时冻结,但在404@Jorge你找到404的解决方案了吗?如果用户在加载图像之前返回屏幕,我会得到异常错误。只有在URL返回404的情况下才会发生,否则一切正常。如何防止这种情况发生?这是这里唯一没有抛出错误并挂起我的应用程序的解决方案。但是在GitHub中,此包被标记为已存档。有人知道为什么吗?它也无法建立在Flatterv1.2.x+上,遗憾的是,我遇到了这个错误:在尝试将它与Flatter1.20.2一起使用时。我仍然不知道如何捕获加载网络映像期间发生的所有错误:-(太棒了,效果很好,最优雅的解决方案也很漂亮!这个错误生成器是最近在2020年初添加的。在我不得不使用“precacheImage”检查url是否工作之前,它确实使代码变得复杂。工作很好。谢谢。如果用户在加载图像之前返回屏幕,我会收到异常错误。只发生在如果URL返回404,否则一切正常。如何防止?