Соединение закрыто до получения полного заголовка

Я новичок в флаттере и работаю над приложением, которое показывает длинный список изображений через 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!

Можете ли вы добавить вывод flutter doctor -v?

10101010 16.07.2019 15:48

Абсолютно да, я добавил это. Спасибо

attila 16.07.2019 16:28
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
9
2
11 609
4
Перейти к ответу Данный вопрос помечен как решенный

Ответы 4

Ответ принят как подходящий

У меня была точно такая же проблема, и я так и не смог выяснить причину проблемы. В итоге я использовал библиотеку Кэшированное сетевое изображение, которая исправила мои проблемы с загрузкой изображений.

отдельное спасибо Якуб, а также для меня Кэшированная сетевая библиотека изображений исправила мои проблемы с загрузкой изображений, и теперь все работает абсолютно нормально!!! отличный!

attila 01.08.2019 09:13

Я использовал этот небольшой хак :) github.com/flutter/flutter/issues/25107#issuecomment-6556557‌​19

Galeen 28.07.2020 14:26

В этой библиотеке та же проблема. Я не смог установить первопричину.

egaga 09.07.2021 11:10

Это может быть связано с тем, что виджет повторно используется в дереве виджетов и, таким образом, прерывает 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

Другие вопросы по теме