【问题标题】:How to clear app cache programmatically on Flutter如何在 Flutter 上以编程方式清除应用程序缓存
【发布时间】:2018-11-14 09:31:22
【问题描述】:

因为我一直在使用 Flutter 开发应用程序。我发现该应用程序体积庞大,而且它使用大量空间作为应用程序数据和应用程序缓存。有没有办法以编程方式清除应用程序缓存?

编辑:我的应用在发布模式下的大小约为 7mb,应用数据约为 11mb。 我的应用在应用内打开一个站点,它还流式传输在线广播,因此它的应用数据不断增加

【问题讨论】:

  • apk和app数据的大小是多少?
  • 在发布模式下,它的大小为 7.5mb,应用数据最小为 11mb,并且还在不断增加
  • 7.5 MB 是预期大小。 Flutter 必须在平台下提供很多繁重的文件。
  • 但我的问题是如何只清除应用缓存

标签: dart flutter


【解决方案1】:

您可以获取临时文件夹,并删除其中的文件。

var appDir = (await getTemporaryDirectory()).path;
new Directory(appDir).delete(recursive: true);

【讨论】:

  • 使用此代码出现此错误,有什么想法吗?未处理的异常:FileSystemException:删除失败,路径 = '/var/mobile/Containers/Data/Application/.../Library/Caches'(操作系统错误:不允许操作,errno = 1)。 - 在 iOS 上运行
  • 我没有在ios上测试,因为我没有mac。
  • 我不知道,我一直在寻找与您相同的解决方案,但我认为这是因为权限可以通过转到 Android Manifest 并添加文件访问权限来解决,因为现在您的应用无权编辑或删除用户存储中的文件
  • @RYOK,我也有类似这种情况的问题,您能否举例说明如何允许从用户存储中编辑或删除文件的权限?
  • 老实说,我上次找到了解决方案,但那是在大约 3 个月之前,我完全忘记了整个问题在说什么。抱歉 *_^ ,如果我发现任何有用的信息,我会回复新信息,但现在我有点忙
【解决方案2】:

您还可以使用 flutter_cache_manager 以编程方式删除或移除应用的缓存。

安装flutter_cache_manager后,使用这个:

await DefaultCacheManager().emptyCache();

【讨论】:

    【解决方案3】:

    它工作正常,你只需要在此之后刷新你的应用程序。

    import 'dart:io';
    import 'package:provider/provider.dart';
    
      Future<void> _deleteCacheDir() async {
        var tempDir = await getTemporaryDirectory();
    
        if (tempDir.existsSync()) {
          tempDir.deleteSync(recursive: true);
        }
      }
    
      Future<void> _deleteAppDir() async {
        var appDocDir = await getApplicationDocumentsDirectory();
    
        if (appDocDir.existsSync()) {
          appDocDir.deleteSync(recursive: true);
        }
      }
    

    【讨论】:

      【解决方案4】:

      注意文森特的回答。

      尽量避免清除设备的临时文件夹。清除应用程序的缓存文件夹会很节省,例如:

      var appDir = (await getTemporaryDirectory()).path + '/<package_name>';
      new Directory(appDir).delete(recursive: true);
      

      【讨论】:

      • by package_name,你指的是什么?我不会认为Bundle ID,Apple ID? UUID?
      • @jbryanh 这是捆绑 ID。
      【解决方案5】:

      您可以轻松删除缓存。

      import 'package:path_provider/path_provider.dart';
      Future<void> _deleteCacheDir() async {
      final cacheDir = await getTemporaryDirectory();
      if (cacheDir.existsSync()) {
      cacheDir.deleteSync(recursive: true);}}
      final appDir = await getApplicationSupportDirectory();
      if (appDir.existsSync()) {
      appDir.deleteSync(recursive: true);}}
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-07-22
        • 2019-08-18
        • 1970-01-01
        相关资源
        最近更新 更多