dart - Flutter/Dart 覆盖 getApplicationDocumentsDirectory 中的文件不能立即工作

标签 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;
    });

最佳答案

缓存是问题所在。请参阅问题 https://github.com/flutter/flutter/issues/24858

来自文档 https://api.flutter.dev/flutter/painting/ImageProvider-class.html

ImageProvider uses the global imageCache to cache images.

你可以使用

import 'package:flutter/painting.dart'

// to clear specific cache
imageCache.evict(FileImage(processedImage));

// to clear all cache
imageCache.clear();

它并没有直接解决我遇到的问题,但是,它是关键。

关于dart - Flutter/Dart 覆盖 getApplicationDocumentsDirectory 中的文件不能立即工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54455813/

相关文章:

algorithm - 我的二进制搜索算法 (a) 正确且 (b) 有效吗?

image - 在加载高分辨率图像时显示加载窗口小部件

ios - Flutter 应用程序未在模拟器上启动。由于不是 'return a valid pid nor a launch error'而退出

events - Flutter:如何防止按键时的默认行为?

flutter - 无法在intellijIDEA中的.dart文件中打开toUpperCase()或toLowerCase()的实现或声明

mongodb - 使用 mongo_dart 连接到 MongoDB Atlas

xml - 如何在Flutter中将远程xml文件转换为字符串?

flutter - 声明预期变量类型导致错误: type '(Map<String, dynamic>) => University' is not a subtype of type '(dynamic) => dynamic' of 'f'

flutter - 按下按钮时显示ListView小部件

firebase - "Could not get GOOGLE_APP_ID in Google Services file from build environment"错误