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

标签 android dart flutter sharedpreferences uiimagepickercontroller

我正在开发一种Flutter应用程序,该应用程序允许用户设置自己选择的背景图片,并“永久保留直到用户对其进行更改”。

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

我已经实现了图像选择器,并尝试将图像文件存储在sharedpreferences中,但是我错了。ImagePicker返回的是Image File,而不是Image File Path。

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

最佳答案

当ImagePicker返回文件时,它会返回您注意到的File对象。该文件位于应用外部,并且可能是临时文件(即可以随时移动/删除/删除)-它可能会保留一段时间,但您不应依赖该文件。

相反,在用户选择了镜像之后,您应该将其复制到应用程序的存储目录,然后从那里开始对其进行访问。

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


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);

拥有该文件后,您要做的就是将bgFile的路径保存到您的SharedProperties中(或者理论上,您可以每次对其进行硬编码并覆盖它)
新图像已加载-由您决定,尽管这种方法可能会遇到以下问题
文件开关)。然后,您将从共享属性中加载bg文件路径并使用它。

希望有帮助=)。

关于android - 保存ImagePicker文件路径并将其用作背景,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53211261/

相关文章:

arrays - 在 Flutter 中创建一个空数组并将其发送到带有空值的 Firestore?

Android Studio 找不到 Firebase

flutter - 如何以编程方式扩展 SliverAppBar

flutter - Dart:N元树的实现

dart - MapEntry 类中的工厂构造函数有什么好处?

android - VS Code/Flutter/Android - keystore 文件未设置用于签署配置版本

java - android gradle构建错误?

android - 如何停止显示在 android 中排队的 Toast 消息

android - 如何从 Android 原生代码 (NDK r5) 访问打包资源

html - Flutter For Web 应用启动 TypeError 异常