getApplicationDocumentsDirectory中的Flutter / Dart覆盖文件无法立即运行

时间:2019-01-31 07:59:27

标签: dart flutter

我正在尝试覆盖我的应用程序临时目录中的文件,但是由于某种原因,该覆盖在我完全热重启我的应用程序后才生效。

我正在尝试将_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;
    });

1 个答案:

答案 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();

它不能直接解决我遇到的问题,但这是关键。