我正在尝试覆盖我的应用程序临时目录中的文件,但是由于某种原因,该覆盖在我完全热重启我的应用程序后才生效。
我正在尝试将_pickedImage变量设置为新的changedImage,将其复制到目录后,但是,使用setState时,它始终保留放置在目录中的第一张图像,并且每次都不会覆盖它。因此,当我显示_pickedImage时,它将始终显示第一个初始图像,直到我完全重启为止,一旦我完全重启应用程序,更改就会发生。想要这样做的原因是,以便用户可以根据需要有效地更改图像。希望这对任何帮助都有意义,
var image = await ImagePicker.pickImage(source: source, maxWidth: 800.0);
if (image != null) {
final Directory extDir = await getApplicationDocumentsDirectory();
final String dirPath = '${extDir.path}/image';
if (Directory(dirPath).existsSync()) {
print('it exists');
var dir = new Directory(dirPath);
dir.deleteSync(recursive: true);
if (Directory(dirPath).existsSync()) {
print('still exists');
} else {
//It is getting in here so seemingly its deleting the orignal directory
print('does not exist');
}
}
new Directory(dirPath).createSync(recursive: true);
String path =
'$dirPath/temporaryImage.jpg';
File changedImage = image.copySync(path);`
setState(() {
//this is where the problem lies
_pickedImage = changedImage;
});
答案 0 :(得分:0)
缓存是问题所在。参见问题https://github.com/flutter/flutter/issues/24858
摘自文档https://api.flutter.dev/flutter/painting/ImageProvider-class.html
ImageProvider使用全局imageCache来缓存图像。
您可以使用
import 'package:flutter/painting.dart'
// to clear specific cache
imageCache.evict(FileImage(processedImage));
// to clear all cache
imageCache.clear();
它不能直接解决我遇到的问题,但这是关键。