我在抖动中遇到一些奇怪的行为。
我正在使用相机包来捕获图像,如下所示:
void _takePicture() { _controller.takePicture(_tempImagePath).then((_) { setState(() { _captured = true; _shutterButtonController.forward(); _acceptCancelController.forward(); }); }); }
非常简单-捕获的图像符合我的期望。如果您注意到该_captured成员,我将使用它来驱动摄像机预览或捕获的图像的显示。这是我的小部件树的一个片段:
_captured
... AspectRatio( aspectRatio: _controller.value.aspectRatio, child: _captured ? Image.file(File(_tempImagePath)) : CameraPreview(_controller)), ...
这也像我期望的那样运行- 捕获后显示图像。但是,要注意的是Image.file(...)总是显示相同的图像。我尝试了多种删除该图像的方法,但我相信它可以正常工作,但是该图像仍然存在。
Image.file(...)
我正要删除并重新创建其中的整个目录,initState()因为屏幕的结构如下:
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; }
即使这样,或通过名称手动删除图像,原始捕获的图像仍保留在由创建的Widget中Image.file(...)。我相当确定删除操作正常- 相机API会抛出一个错误,如果 不 删除它,它将无法覆盖前一张图像。
最后,如果我终止了该应用程序并重新启动,我将能够重新拍摄照片并看到一张新的图像,但是同样,该图像将一直保留到整个应用程序被终止为止。好像图像以某种方式被缓存了?
我对Flutter和Dart还是陌生的,因此对您的帮助表示赞赏。
搜索了Github问题之后,我发现Flutter正在将这些图像缓存在后台。它们将保留在内存中,而不管从磁盘中删除。
我将此添加到我的删除方法,并解决了我的问题。
import 'package:flutter/painting.dart'; ... imageCache.clear();
我在这里也找到了答案,但是基于Flutter v0.5.1,import语句似乎是错误的。