Flutter 在dart中管理异常

Flutter 在dart中管理异常,flutter,exception,dart,Flutter,Exception,Dart,我正在尝试从internet获取图像,并显示个人资料照片。如果在显示图片时出现错误(可能该位置不存在),我想显示一个股票图标 我的代码: class AvatarWidget extends StatelessWidget { const AvatarWidget({ Key key, }) : super(key: key); @override Widget build(BuildContext context) { return ClipOval( child:

我正在尝试从internet获取图像,并显示个人资料照片。如果在显示图片时出现错误(可能该位置不存在),我想显示一个股票图标

我的代码:

class AvatarWidget extends StatelessWidget {
const AvatarWidget({
    Key key,
}) : super(key: key);

@override
Widget build(BuildContext context) {
    return ClipOval(
    child: CircleAvatar(
        child: ProfilePicWidget(),
        radius: 70,
        backgroundColor: Colors.grey,
    ),
    );
}
}

class ProfilePicWidget extends StatelessWidget {
const ProfilePicWidget({
    Key key,
}) : super(key: key);

@override
Widget build(BuildContext context) {
    Widget profilePic;
    try {
    profilePic = Image(
        image: NetworkImage(profileLink),
    );
    } catch (e) {
    profilePic = Icon(FontAwesomeIcons.userCircle);
    }
    return profilePic;
}
}
然而,即使使用try-catch块,我也会遇到一个异常,并且我的图标不会显示。为什么会这样

════════ Exception caught by image resource service ════════════════════════════════════════════════
The following NetworkImageLoadException was thrown resolving an image codec:
HTTP request failed, statusCode: 404, http://google.com/data/data/media/2020/05/01/images_1_4CDIfHK.thumbnail.jpeg

When the exception was thrown, this was the stack: 
#0      NetworkImage._loadAsync (package:flutter/src/painting/_network_image_io.dart:97:9)
<asynchronous suspension>
#1      NetworkImage.load (package:flutter/src/painting/_network_image_io.dart:49:14)
#2      ImageProvider.resolveStreamForKey.<anonymous closure> (package:flutter/src/painting/image_provider.dart:501:13)
#3      ImageCache.putIfAbsent (package:flutter/src/painting/image_cache.dart:359:22)
...
Image provider: NetworkImage("http://google.com/data/data/media/2020/05/01/images_1_4CDIfHK.thumbnail.jpeg", scale: 1.0)
Image key: NetworkImage("http://google.com/data/data/media/2020/05/01/images_1_4CDIfHK.thumbnail.jpeg", scale: 1.0)
════════════════════════════════════════════════════════════════════════════════════════════════════
════════ 图像资源服务捕获到异常════════════════════════════════════════════════
解析图像编解码器时引发以下NetworkImageLoadException:
HTTP请求失败,状态代码:404,http://google.com/data/data/media/2020/05/01/images_1_4CDIfHK.thumbnail.jpeg
引发异常时,这是堆栈:
#0 NetworkImage.\u loadAsync(包:flatter/src/painting/\u network\u image\u io.dart:97:9)
#1 NetworkImage.load(包:颤振/src/painting/_-network\u-image\u-io.dart:49:14)
#2 ImageProvider.resolveStreamForKey。(包装:颤振/src/painting/image_供应商。dart:501:13)
#3 ImageCache.putIfAbsent(包:flatter/src/painting/image\u cache.dart:359:22)
...
图像提供程序:网络图像(“http://google.com/data/data/media/2020/05/01/images_1_4CDIfHK.thumbnail.jpeg,比例:1.0)
图像键:网络图像(“http://google.com/data/data/media/2020/05/01/images_1_4CDIfHK.thumbnail.jpeg,比例:1.0)
════════════════════════════════════════════════════════════════════════════════════════════════════

这是因为
NetworkImage
在尝试捕获之前捕获并显示错误,如果要捕获get Image错误,应该使用get请求直接获取Image数据,而不是
NetworkImage
注意,有一行写着“图像资源服务捕获异常”:已捕获异常


要检测错误,您需要使用获取
ImageStream
,然后使用注册错误。
ImageStreamListener
允许您指定一个
onError
回调,如果图像加载失败,将调用该回调。

如果转到提供给NetworkImage小部件的url,它将不会打开。尝试使用一个有效的url。我没有发布原始url。假设url不起作用,并且发生错误。。我正在试图捕捉错误,但它不起作用。我的问题是为什么我的错误处理不起作用