Dynami c S3 Bucket URL Caching Flutter - PullRequest
0 голосов
/ 10 июля 2020

Я хотел бы кэшировать сетевое изображение из URL-адреса корзины S3 по идентификатору или ключу. Я попытался использовать параметр key:, но это не сработало. Посоветуйте, пожалуйста, как мне этого добиться. Вот код кэшированного сетевого образа с параметром 'key', который, похоже, не выполняет то, что я намеревался.

       CachedNetworkImage(
           key: Key(uni['university_name'].toString()), // Doesn't seem to do the job
            imageUrl: uni['image_url'],
            placeholder: (context, url) => CardPlaceHolder(),
            errorWidget: (context, url, error) => Padding(
              padding: EdgeInsets.all(21),
              child: Icon(
                Icons.error,
                size: 30,
                color: Colors.red.withOpacity(0.8),
              ),
            ),
            imageBuilder: (context, imageProvider) => ...

1 Ответ

0 голосов
/ 10 июля 2020

В настоящее время в CachedNetworkImage отсутствует получение кэшированного изображения по ключу

Используемый вами ключ - это ключ Widgets, не связанный с CachedNetworkImage поведением

Давайте посмотрим, что находится внутри CachedNetworkImage

cached_network_image зависит от flutter_cache_manager

И flutter_cache_manager имеет реализацию ( issue # 179 ) повторного вызова по ключу, но он все еще не выпущен ни в одной версии

Таким образом, CachedNetworkImage будет пропускать эту функциональность, пока flutter_cache_manager version не выпустит ее новые версии

Хотя мы можем использовать эту функциональность, но нам нужно реализовать виджет с нашей стороны

Временное решение

  1. зависит от flutter_cache_manager
/// this is pubspec dependencies:
flutter_cache_manager:
    git:
      url: https://github.com/Baseflow/flutter_cache_manager
      path: flutter_cache_manager
      ref: f109a48c31c4b3ed0a2c1ea2a5749c495e4fa2f4
доработайте эту наивную реализацию в соответствии с вашим вариантом использования
    FutureBuilder<File>(
      future: DefaultCacheManager().getSingleFile(
          'url', key: 'file-id'),
      builder: (context, snapshot) {
        if (snapshot.hasData) {
          return Image.file(snapshot.data);
        }
        // implement here some behavior like CachedNetworkImage does
        return CircularProgressIndicator();
      },
    );

PS Я обновлю ответ, когда CachedNetworkImage будет поддерживать

...