首页 > 解决方案 > 在 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<…&gt;

标签: flutterdart

解决方案


您可以从包创建自定义缓存管理器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;
    }
  }

}


推荐阅读