首页 文章

颤动 - 图像被删除后仍然存在?

提问于
浏览
1

我在颤动的图像周围经历了一些奇怪的行为 .

我正在使用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(...) 创建的窗口小部件内部 . 我相当肯定删除工作正常 - 相机API将抛出一个错误,如果你不删除它不能覆盖以前的图像 .

最后,如果我杀了应用程序并重新启动,我将能够重新拍摄照片并看到一张新照片,但是再一次,该照片将一直存在,直到整个应用程序被杀死 . 似乎图像以某种方式缓存?

我对Flutter和Dart很新,所以任何帮助都表示赞赏 .

1 回答

  • 2

    在搜索了Github问题之后,我能够在幕后了解Flutter是这些图像 . 无论是从磁盘中删除它们,它们都会持久存储在内存中 .

    我把它添加到我的删除方法,我的问题解决了 .

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

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

相关问题