flutter - ImagePicker,如何再次设置图像?

标签 flutter dart

最小码:

File _file;

Future<void> _pickImage() async {
  final image = await ImagePicker.pickImage(source: ImageSource.camera);

  if (image != null) {
    final file = File("${(await getApplicationDocumentsDirectory()).path}/image.png");
    await file.writeAsBytes(await image.readAsBytes());
    setState(() => _file = file); // `_file = image` works though
  }
}

@override
Widget build(BuildContext context) {
  return Scaffold(
    floatingActionButton: FloatingActionButton(child: Icon(Icons.camera_alt), onPressed: _pickImage),
    body: _file == null ? Container() : Image.file(_file),
  );
}

Watch video

如您所见,一旦我选择了图像,它就可以了,但是第二次选择时,它就不起作用了,而且我也没有遇到任何错误。谁能帮忙吗?

最佳答案

您需要三件事:

首先,您必须使用ImageProvider及其evict()方法:

var image = FileImage(File('someImage.jpg'));

那么您需要使用上面的ImageImageProvider小部件,并且还需要分配一个唯一的key以便每次调用build()方法时“不同”:
child: Image(
  image: image,
  key: UniqueKey(),
),

最后,在覆盖someImage.jpg之后,您必须调用evict()方法:
// part of your _pickImage() method
// here someImage.jpg contains updated content
image.evict();
setState(() {});

更新:实际上,您不需要var image = FileImage(File('someImage.jpg'));-您可以在Image小部件内直接将其用作image: FileImage(File('someImage.jpg')),并在覆盖图像后调用FileImage(File('someImage.jpg')).evict()

关于flutter - ImagePicker,如何再次设置图像?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60914284/

相关文章:

flutter - Class.new 在 Dart 中做什么

dart - 在 Aqueduct Dart 中发送帖子请求

firebase - 由于权限问题,无法访问 Firebase 中的 Cloud Firestore

flutter - 如何在 Wrap Flutter 中从同一行开始文本

json - JSON.parse Map希望String获取整数

flutter - 从流一一获得 future

dart - 如何在初始化列表 dart lang 中运行自定义函数?

internationalization - 在 Flutter 应用程序中使用英里还是公里?

android - Flutter - 使用 ACTION_EDIT Intent 时的 PlatformException

flutter - 如何在不关闭 AdGuard 的情况下使 Flutter 工作