Кэшированные данные flutter_cache_manager удаляются на устройствах Samsung после 25000 файлов - PullRequest
1 голос
/ 21 марта 2020

Мое приложение использует flutter_cache_manger для загрузки всех файлов на локальное устройство, чтобы их можно было использовать в автономном режиме. Недавно я понял, что на устройствах Samsung плагин работает очень странно. Кэш очищается автоматически после замены 25000 файлов или файлов, которые были загружены при запуске, новыми файлами. Я проверил это на 2 разных планшетах Samsung и телефоне Samsung. У меня есть около 30000 файлов для скачивания. Я протестировал приложение на своем One Plus 6t, все файлы загружены на него и остается там.

На моем One Plus 6t

enter image description here enter image description here enter image description here

То же приложение на Samsung M20

enter image description here enter image description here enter image description here

См. Скриншоты Samsung. Кэш-память очищалась автоматически во время загрузки. Этого не должно быть. Я расширил flutter_cache_manager, чтобы хранить файлы в течение 5 лет и сохранять 50000 файлов. Вот код для этого.

class MyCacheManager extends BaseCacheManager {
  static const key = "suryagoldscache";

  static MyCacheManager _instance;

  factory MyCacheManager() {
    if (_instance == null) {
      _instance = new MyCacheManager._();
    }
    return _instance;
  }

  MyCacheManager._()
      : super(key,
      maxAgeCacheObject: Duration(days: 1825),
      maxNrOfCacheObjects: 50000,
      fileFetcher: _myHttpGetter);

  @override
  Future<String> getFilePath() async {
    var directory = await getTemporaryDirectory();
    return path.join(directory.path, key);
  }

  static Future<FileFetcherResponse> _myHttpGetter(String url,
      {Map<String, String> headers}) async {
    HttpFileFetcherResponse response;
    try {
      var res = await http.get(url, headers: headers);
      res.headers.addAll({'cache-control': 'private, max-age=157680000'});
      response = HttpFileFetcherResponse(res);
    } on SocketException {
//      print('No internet connection');
    }
    return response;
  }
}
...