Flatter: ImageCache из сети вызывает сбой приложения - PullRequest
1 голос
/ 08 февраля 2020

У меня есть список с картами, содержащими изображения, которые я загружаю из CDN. Я получаю 20 новых продуктов, когда прокрутка занимает 50% страницы (подкачка). Однако через какое-то время это всегда составляет sh.

. Может ли это быть из-за больших изображений? Некоторые изображения еще не загружены и возвращают 404. Изображения иногда также мигают и перезагружаются.

Используя следующий пакет, рекомендованный флаттером: https://github.com/renefloor/flutter_cached_network_image

код:

Container(
    padding: EdgeInsets.only(
    top: MediaQuery.of(context).size.height * 0.02),
    width: MediaQuery.of(context).size.width * 0.3,
    child: CachedNetworkImage(
    placeholder: (context, url) => Container(
    padding: EdgeInsets.only(
        top: MediaQuery.of(context).size.height *
            0.05),
    child: placeholder,
    ),
    imageUrl: widget.product.pictureUrl,
)

Stacktrace:

MultiFrameImageStreamCompleter._decodeNextFrameAndSchedule (image_stream.dart:680)
MultiFrameImageStreamCompleter._handleCodecReady (image_stream.dart:644)
FileImage._loadAsync (image_provider.dart)
FileImage.load (image_provider.dart:638)
ImageProvider.resolve.<fn>.<fn>.<fn> (image_provider.dart:327)
ImageCache.putIfAbsent (image_cache.dart:160)
ImageProvider.resolve.<fn>.<fn> (image_provider.dart:325)
SynchronousFuture.then (synchronous_future.dart:38)
ImageProvider.resolve.<fn> (image_provider.dart:323)
ImageProvider.resolve (image_provider.dart:315)
_ImageState._resolveImage (image.dart:1010)
_ImageState.didChangeDependencies (image.dart:967)
StatefulElement._firstBuild (framework.dart:4376)
ComponentElement.mount (framework.dart:4201)
Element.inflateWidget (framework.dart:3194)
Element.updateChild (framework.dart:2988)
SingleChildRenderObjectElement.mount (framework.dart:5445)
Element.inflateWidget (framework.dart:3194)
MultiChildRenderObjectElement.mount (framework.dart:5551)
Element.inflateWidget (framework.dart:3194)

Edit1:

После некоторого расследования Я обнаружил, что если я использую одну и ту же картинку везде (может быть с высоким разрешением), она работает нормально. Так что, может быть, это какие-то картинки, которые могут быть испорчены, или у них много разных картинок?

Edit2: Один из выходов, которые происходят в cra sh, следующий:

I / flutter (5858): База данных предупреждений была заблокирована для 0: 00: 10.000000. Убедитесь, что вы всегда используете объект транзакции для операций с базой данных во время транзакции

Также чувствует себя все более и более связанным с 404 изображениями. Кэш заблокирован?

1 Ответ

0 голосов
/ 22 февраля 2020

Я изменил код на следующий:

FadeInImage(
  placeholder: MemoryImage(kTransparentImage),
  image: new CachedNetworkImageProvider(
      widget.product.pictureUrl),
))

Я также изменил список, в котором отображаются все изображения:

SliverGridDelegateWithFixedCrossAxisCount(
    childAspectRatio: _aspectRatio, crossAxisCount: 2),
    itemCount: widget.products.length,
    addAutomaticKeepAlives: false,
    itemBuilder: (context, index) {
      return ProductCard(
          showProductFunction: showProductFunction,
          product: widget.products[index]);
    },

Свойство, которое может оказать некоторое влияние:

addAutomaticKeepAlives: false

Но главное было go для всех изображений:

  • Все изображения существуют (нет 404)
  • Все изображения макс. 500x500 (ранее некоторые, где 4000x4000)
  • Все изображения теперь сжаты
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...