保存 ImagePicker 文件路径并将其用作背景

Omo*_*o4i 1 android uiimagepickercontroller sharedpreferences dart flutter

我正在开发一个 flutter 应用程序,它允许用户设置他们选择的背景图片并“永久保留直到用户更改它”。

使用 Image.file(pickedImage) 是暂时的,如果用户离开页面,并返回图像将被关闭。

我已经实现了图像选择器,并尝试将图像文件存储在共享首选项中,但我错了 ImagePicker 返回图像文件而不是图像文件路径。

如何获取选择的图像文件路径并将其用作背景?

rmt*_*zie 5

当 ImagePicker 返回一个文件时,它会返回一个您注意到的 File 对象。这个文件是应用程序的外部文件,可能是临时的(即它可以在任何时候移动/删除/等)——它可能会持续一段时间,但你不应该依赖它。

相反,在用户选择图像后,您应该将其复制到应用程序的存储目录,然后从那里访问它。

为此,请按照flutter 读/写文件文档 中的说明进行操作。但基本上,您想要做的是使用path_provider 库getApplicationDocumentsDirectory方法获取本地目录,然后使用 file 作为您从图像选择器接收的文件和应用程序文档目录下的路径进行调用。file.copy(<path under application document directory>)

IE

var image = await ImagePicker.pickImage(source: ImageSource.camera);
Directory appDocDir = await getApplicationDocumentsDirectory();
String bgPath = appDocDir.uri.resolve("background.jpg").path;
File bgFile = await image.copy(bgPath);
Run Code Online (Sandbox Code Playgroud)

一旦你有了那个文件,你想要做的是将 bgFile 的路径保存到你的 SharedProperties(或者理论上你可以硬编码它并在每次加载新图像时覆盖它 - 由你决定,尽管这种方法可能会遇到问题文件开关)。然后,您将从共享属性加载 bg 文件路径并使用它。

希望有帮助=)。