我具有此功能来保存图库中的图像并将其显示为背景:
Future _getImage() async {
// ImagePicker picker = ImagePicker();
PickedFile pickedFile = await picker.getImage(source: ImageSource.gallery);
if (pickedFile == null) return;
File tmpFile = File(pickedFile.path);
tmpFile = await tmpFile.copy(tmpFile.path);
setState(() {
if (pickedFile != null) {
//_image = File(pickedFile.path);
_image = tmpFile;
print('_image: $_image');
} else {
print('No image selected');
}
});
}
但是在我调用它之后,它说图像为空:
文件:“ / data / user / 0 / com.app.flutter / cache / image_picker5156338879856055755740.jpg”为空,无法加载为图像。
我不确定这里发生了什么,因为它可以在控制台中很好地打印图像,如下所示:
_image:文件:'/data/user/0/com.app.flutter/cache/image_picker5156338879856055740.jpg
所以它意味着它在缓存中,但是由于某种原因,它返回为空并且不会将图像添加到后台:
decoration: BoxDecoration(
image: DecorationImage(
image: _image == null
? MemoryImage(kTransparentImage)
: FileImage(_image),
fit: BoxFit.cover,
添加了构建,以防万一出现错误,但是我认为不存在错误。基本上,我只需要画廊中的图像即可持久并留在应用程序中即可。
编辑:将setState()添加到代码中,但是它仍然不是持久性的,一定是我缺少的东西:
Future _getImage() async {
// ImagePicker picker = ImagePicker();
PickedFile pickedFile = await picker.getImage(source: ImageSource.gallery);
if (pickedFile == null) {
return null;
}
Directory appDirectory = await getApplicationDocumentsDirectory();
File newImage = File(appDirectory.path + 'fileName');
newImage.writeAsBytes(File(pickedFile.path).readAsBytesSync());
setState(() {
_image = newImage;
print(newImage.path + ' test');
});
}
答案 0 :(得分:1)
尝试一下
Future _getImage() async {
ImagePicker picker = ImagePicker();
final pickedFile = await picker.getImage(source: ImageSource.gallery);
if (pickedFile == null) {
return null;
}
Directory appDirectory = await getApplicationDocumentsDirectory();
File newImage = File(appDirectory.path + 'fileName');
await newImage.writeAsBytes(File(pickedFile.path).readAsBytesSync());
setState(() {
_image = newImage;
});
}
答案 1 :(得分:0)
没关系,我设法通过SharedPreferences使它持久化,我简单地做了两个不同的函数,每个函数用于保存或加载图像,并将_loadImage()添加到initState
(defn render-image [message]
(let [width 200 height 200
bi (java.awt.image.BufferedImage. width height java.awt.image.BufferedImage/TYPE_INT_ARGB)
font (java.awt.Font. "TimesRoman" java.awt.Font/BOLD 20)
ig (doto ^java.awt.Graphics2D (.createGraphics bi) (.setFont font))
metrics (.getFontMetrics ig)
str-width (.stringWidth metrics message)
str-height (.getAscent metrics)]
(doto ig
(.setPaint java.awt.Color/BLACK)
;; Compiler complains if x- and y-arguments to .drawString
;; are not integers. Why?
(.drawString message
(int (/ (- width str-width) 2))
(int (+ (/ height 2) (/ str-height 4)))))
bi))
(defn -main [filename]
(-> (render-image "Hello world")
(javax.imageio.ImageIO/write "PNG" (java.io.File. filename))))
}