flutter - 在 cachedNetworkImage 崩溃 APP 中出现 404 状态错误
问题描述
我在颤振中使用 CacheNetworkImage 从 S3 存储桶中获取图像,但如果它无法找到图像,它会返回状态代码 404,但应用程序会崩溃。我想问如何处理这种行为。
CachedNetworkImage(
imageUrl: this.coverImage,
fit: BoxFit.fill,
errorWidget: (context, url, error) =>
Container(
decoration: BoxDecoration(
image: DecorationImage(
image: AssetImage(
'assets/images/event-
placeholder.png'),
fit: BoxFit.fill),
borderRadius:
BorderRadius.circular(5.0)),),
),
[VERBOSE-2:ui_dart_state.cc(148)] Unhandled Exception: HttpException: No valid statuscode. Statuscode was 404
#0 BaseCacheManager.getFile
package:flutter_cache_manager/src/cache_manager.dart:120
<asynchronous suspension>
#1 CachedNetworkImageState._animatedWidget
package:cached_network_image/src/cached_image_widget.dart:270
#2 CachedNetworkImageState.build
package:cached_network_image/src/cached_image_widget.dart:196
#3 StatefulElement.build
package:flutter/…/widgets/framework.dart:4012
#4 ComponentElement.performRebuild
package:flutter/…/widgets/framework.dart:3924
#5 Element.rebuild
package:flutter/…/widgets/framework.dart:3721
#6 BuildOwner.buildScope
package:flutter/…/widgets/framework.dart:2340
#7 _WidgetsFlutterBinding&BindingBase&GestureBinding&ServicesBinding&SchedulerBinding&PaintingBinding&SemanticsBinding&RendererBinding&WidgetsBinding.drawFrame
package:flutter/…/widgets/binding.dart:700
#8 _Widge<…>
解决方案
您可以从包创建自定义缓存管理器flutter_cache_manager
并将其实例传递给CachedNetworkImage.cacheManager
例子:
class DefaultCacheManagerWithHandler extends DefaultCacheManager {
@override
Stream<FileInfo> getFile(String url, {Map<String, String> headers}) async* {
var stream = super.getFile(url, headers: headers);
try {
await for (var value in stream) {
yield value
}
} catch (_) {
yield null;
}
}
}
推荐阅读
- python - 如何将预编译的二进制文件添加到 python 项目(云函数 python)?
- javascript - 在 Three.js 中控制自定义几何图形的缩放
- docker - docker:来自守护进程的错误响应:驱动程序在端点 Web 上编程外部连接失败:启动用户级代理时出错:监听 tcp 0.0.0
- sql - 如何创建一个视图,排除与 CASE 语句中设置的任何条件不匹配的数据?
- node.js - Cloud Functions for Firestore:访问父集合数据
- xml - XPath 没有得到任何节点
- ios - Swift:Firestore 子集合、自定义对象和监听器
- mysql - --skip-grant-tables 选项不能执行语句
- html - 当我们在 Google Chrome 开发者工具上使用“删除元素”时,它真的会从实时全局服务器中删除该元素吗?
- python - 如何获取 GCP Cloud Function 实际调用的 URL,包括查询参数(Python 运行时)