Управление исключениями в дротике - PullRequest
0 голосов
/ 01 мая 2020

Я пытаюсь получить изображение из inte rnet и отобразить фотографию профиля. Если при отображении числа пи c возникает ошибка (возможно, он не существует в этом месте), я хочу отобразить значок акции.

Мой код:

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)
════════════════════════════════════════════════════════════════════════════════════════════════════

Ответы [ 2 ]

1 голос
/ 01 мая 2020

Обратите внимание, что есть строка «Исключение, перехваченное службой ресурса изображения»: исключение уже перехвачено.

Чтобы обнаружить ошибку, вам нужно будет использовать ImageProvider.resolve чтобы получить ImageStream, а затем используйте ImageStream.addListener для регистрации ImageStreamListener. ImageStreamListener позволяет указать обратный вызов onError, который будет вызываться, если изображение не загружается.

0 голосов
/ 01 мая 2020

это потому, что NetworkImage перехватывает и показывает ошибку перед попыткой перехвата, если вы хотите перехватить ошибку get Image, вы должны напрямую получить данные изображения с запросом get, а не с NetworkImage

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...