dart - flutter - 图像被删除后仍然存在?

我在抖动图像时遇到了一些奇怪的行为。

我正在使用 camera像这样捕获图像的包:

void _takePicture() {
_controller.takePicture(_tempImagePath).then((_) {
  setState(() {
    _captured = true;
    _shutterButtonController.forward();
    _acceptCancelController.forward();
  });
});
}

非常简单 - 图像是按照我的预期拍摄的。如果您注意到 _captured 成员,我正在使用它来驱动显示相机预览或捕获的图像。这是我的小部件树的片段:

...
AspectRatio(
        aspectRatio: _controller.value.aspectRatio,
        child: _captured
            ? Image.file(File(_tempImagePath))
            : CameraPreview(_controller)),
...

这也像我预期的那样 - 图像在被捕获后显示。但是,问题似乎是 Image.file(...) 将始终显示相同的图像。我已经尝试了多种方法来删除此图像,并且我相信它可以正常工作,但图像仍然存在。

我正在删除并重新创建 initState() 内的整个目录,因为屏幕的构造如下:

Future<String> get getTempImageDirectory async {
  final directory = await getApplicationDocumentsDirectory();
  var imageDirectory = Directory(directory.path + '/images/');

  print('The image directory ${imageDirectory.path} exists: ${imageDirectory.existsSync()}');

  if (imageDirectory.existsSync()) {
    imageDirectory.deleteSync(recursive: true);
  }

  imageDirectory.createSync();

  return imageDirectory.path;
}

即使这样,或者按名称手动删除图像,最初捕获的图像仍然存在于 Image.file(...) 创建的 Widget 中。我相当确定删除工作正常 - 如果您删除它,相机 API 将抛出一个无法覆盖之前图像的错误。

最后,如果我杀死应用程序并重新启动,我将能够重新拍摄照片并看到一张新照片,但同样,这张照片将一直存在,直到整个应用程序被杀死。图片好像被缓存了?

我对 Flutter 和 Dart 还很陌生,因此非常感谢任何帮助。

最佳答案

通过 Github 问题搜索,得知 Flutter 是 caching这些图像在幕后。无论从磁盘中删除它们,它们都会保留在内存中。

我将这个添加到我的删除方法中,我的问题就解决了。

import 'package:flutter/painting.dart';
...
imageCache.clear();

我也找到了答案 here ,但是基于 Flutter v0.5.1 的 import 语句似乎是错误的。

关于dart - flutter - 图像被删除后仍然存在?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50936168/

相关文章:

dart - 在 Flutter 应用中下载大型 pdf 文件

flutter - 如何更改底部导航栏的颜色?

flutter - Flutter 中的 `TabBarView` 和 `PageView` 有什么

ios - 将我的 Flutter App 发送到我的真实 iPhone 而不是模拟器

flutter - 如何等待一个类初始化?

dart - Flutter - float 操作按钮 - 隐藏项目的可见性

dart - Flutter - 使用 Flutter 创建自定义控件

ios - 无法使用 PathProvider 依赖项构建 flutter 项目

dart - 使用 Flutter 单击按钮后的网络请求

flutter - 如何混淆 Flutter 应用程序?