Я новичок в флаттере и работаю над приложением, которое показывает длинный список изображений через Image.network. Все работает, но довольно часто и абсолютно рандомно (даже если я очень медленно прокручиваю), я получаю эту ошибку:
I/flutter (10990): EXCEPTION CAUGHT BY IMAGE RESOURCE SERVICE
I/flutter (10990): The following HttpException was thrown resolving an image codec:
I/flutter (10990): Connection closed before full header was received, uri =
I/flutter (10990): http://www.attilofficina.altervista.org/phpbackend/JOB/000004/mockup/000004_017.jpg
I/flutter (10990):
I/flutter (10990): When the exception was thrown, this was the stack:
I/flutter (10990): #0 NetworkImage._loadAsync (package:flutter/src/painting/image_provider.dart:525:41)
I/flutter (10990): <asynchronous suspension>.
И эти изображения пропускаются!
Есть ли способ справиться с этой ошибкой и принудительно перезагрузить отсутствующие изображения? Заранее отдельное спасибо
Я также пробовал с разбивкой на страницы listView с минимальным количеством страниц, которые должны быть загружены за раз, но это не решает, и ошибка всегда возвращается случайным образом.
Вот трепыхаться доктор -v
[√] Flutter (Channel stable, v1.7.8+hotfix.3, on Microsoft Windows [Versione 10.0.17134.885], locale it-IT)
• Flutter version 1.7.8+hotfix.3 at C:\src\flutter
• Framework revision b712a172f9 (7 days ago), 2019-07-09 13:14:38 -0700
• Engine revision 54ad777fd2
• Dart version 2.4.0
[√] Android toolchain - develop for Android devices (Android SDK version 28.0.3)
• Android SDK at C:\Users\Mussa.DESKTOP-HFFLS0G\AppData\Local\Android\sdk
• Android NDK location not configured (optional; useful for native profiling support)
• Platform android-28, build-tools 28.0.3
• Java binary at: C:\Program Files\Android\Android Studio\jre\bin\java
• Java version OpenJDK Runtime Environment (build 1.8.0_152-release-1343-b01)
• All Android licenses accepted.
[√] Android Studio (version 3.4)
• Android Studio at C:\Program Files\Android\Android Studio
• Flutter plugin version 37.0.1
• Dart plugin version 183.6270
• Java version OpenJDK Runtime Environment (build 1.8.0_152-release-1343-b01)
[√] VS Code (version 1.36.0)
• VS Code at C:\Users\Mussa.DESKTOP-HFFLS0G\AppData\Local\Programs\Microsoft VS Code
• Flutter extension version 3.2.0
[√] Connected device (1 available)
• Android SDK built for x86 • emulator-5554 • android-x86 • Android P (API 27) (emulator)
• No issues found!
Абсолютно да, я добавил это. Спасибо





У меня была точно такая же проблема, и я так и не смог выяснить причину проблемы. В итоге я использовал библиотеку Кэшированное сетевое изображение, которая исправила мои проблемы с загрузкой изображений.
отдельное спасибо Якуб, а также для меня Кэшированная сетевая библиотека изображений исправила мои проблемы с загрузкой изображений, и теперь все работает абсолютно нормально!!! отличный!
Я использовал этот небольшой хак :) github.com/flutter/flutter/issues/25107#issuecomment-655655719
В этой библиотеке та же проблема. Я не смог установить первопричину.
Это может быть связано с тем, что виджет повторно используется в дереве виджетов и, таким образом, прерывает HTTP-запрос. Затем вы можете использовать ключ в виджете FutureBuilder или Image.
child: FutureBuilder<File>(
key: ValueKey(imageUrl), // or use UniqueKey()
...
Эта проблема все еще существует, несмотря на то, что выпуск на GitHub был закрыт:
Эта ошибка действительно случайна, и мы не могли знать, когда она станет ошибкой.
Мое решение для решения этой проблемы заключается в том, что мы можем использовать FadeInImage, чтобы узнать, когда изображение запроса получило ошибку Connection closed before full header was received, URI =, мы можем обработать ее методом imageErrorBuilder.
Я создаю новый виджет под названием UrlImage:
FadeInImage.memoryNetwork(
placeholder: kTransparentImage,
image: imageURL,
imageErrorBuilder: (context, error, stacktrace) { // Handle Error for the 1st time
return FadeInImage.memoryNetwork(
placeholder: kTransparentImage,
image: imageURL,
imageErrorBuilder: (context, error, stacktrace) { // Handle Error for the 2nd time
return FadeInImage.memoryNetwork(
fit: BoxFit.cover,
placeholder: kTransparentImage,
image: imageURL,
imageErrorBuilder: (context, error, stacktrace) { // Handle Error for the 3rd time to return text
return Center(child: Text('Image Not Available'));
},
);
},
);Более подробный виджет, вы можете увидеть код ниже в моем Gist: https://gist.github.com/Robihamanto/5e0dd358d4da90603683ca74430aff8a
Проблема все еще существует на момент написания этого. Пробовал с пакетом CachedNetworkImage, результат тот же. В конце концов я использовал extended_image, и это работает как шарм. Взгляните на плагин здесь - https://pub.dev/packages/extended_image
Я завершил портирование своего приложения для использования этого пакета. События загрузки, ошибки, успеха также можно легко обрабатывать, например CachedNetworkImage
Можете ли вы добавить вывод
flutter doctor -v?