我正在开发一个Flutter应用程序,该应用程序允许用户设置自己选择的背景图片,并“永久保留直到用户对其进行更改”。
如果用户离开页面并返回图像,则暂时使用Image.file(pickedImage)。
我已经实现了图像选择器,并尝试将图像文件存储在sharedpreferences中,但是我错了。ImagePicker返回的是Image File,而不是Image File Path。
如何获取选择的图像文件路径并将其用作背景?
答案 0 :(得分:0)
ImagePicker返回文件时,它会返回您注意到的File对象。该文件位于应用程序外部,并且可能是临时文件(即可以随时移动/删除/删除)-它可能会保留一段时间,但您不应依赖该文件。
相反,在用户选择图像之后,您应该将其复制到应用程序的存储目录,然后从那里开始对其进行访问。
为此,请按照flutter reading/writing files documentation中的说明进行操作。但基本上,您想做的是使用path_provider library的getApplicationDocumentsDirectory
方法获取本地目录,然后调用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文件路径并使用它。
希望有帮助=)。
答案 1 :(得分:0)
尝试以下代码:
import 'dart:io';
import 'package:flutter/material.dart';
import 'package:image_picker/image_picker.dart';
import 'package:path/path.dart' as path;
import 'package:path_provider/path_provider.dart' as syspaths;
Future<void> _takePicture() async {
final picker = ImagePicker();
final imageFile = await picker.getImage(
source: ImageSource.camera,
maxWidth: 600,
);
setState(() {
_storedImage = File(imageFile.path);
});
final appDir = await syspaths.getApplicationDocumentsDirectory();
final fileName = path.basename(imageFile.path);
final savedImage = await imageFile.copy('${appDir.path}/$fileName');
}