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

Android 保存ImagePicker文件路径并将其用作背景,android,dart,flutter,sharedpreferences,uiimagepickercontroller,Android,Dart,Flutter,Sharedpreferences,Uiimagepickercontroller,我正在开发一个Flitter应用程序,它允许用户设置自己选择的背景图片,并“永久保留,直到用户更改它” 使用Image.file(pickedImage)是暂时的,如果用户离开页面并返回,图像将被取消 我已经实现了图像选择器,并尝试将图像文件存储在SharedReferences中,但我错了,ImagePicker返回的是图像文件而不是图像文件路径 如何获取拾取的图像文件路径并将其用作背景?当ImagePicker返回一个文件时,它将返回一个文件对象,如您所述。此文件位于应用程序外部,可能是临时

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

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

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


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

当ImagePicker返回一个文件时,它将返回一个文件对象,如您所述。此文件位于应用程序外部,可能是临时文件(即,它可能在任何时候被移动/删除/等等)-它可能会持续一段时间,但您不应该依赖于此

相反,在用户选择映像后,您应该将其复制到应用程序的存储目录中,然后从此处访问它

为此,请按照中的说明进行操作。但基本上,您要做的是使用的
getApplicationDocumentsDirectory
方法获取本地目录,然后调用
file.copy()
,其中file是从图像选择器接收到的文件,application document目录下的路径是您想要的任何路径

i、 e

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


希望对您有所帮助。

当ImagePicker返回一个文件时,它会返回一个文件对象,正如您所说的。此文件位于应用程序外部,可能是临时文件(即,它可能在任何时候被移动/删除/等等)-它可能会持续一段时间,但您不应该依赖于此

相反,在用户选择映像后,您应该将其复制到应用程序的存储目录中,然后从此处访问它

为此,请按照中的说明进行操作。但基本上,您要做的是使用的
getApplicationDocumentsDirectory
方法获取本地目录,然后调用
file.copy()
,其中file是从图像选择器接收到的文件,application document目录下的路径是您想要的任何路径

i、 e

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

希望对您有所帮助。

请尝试以下代码:

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');
导入'dart:io';
进口“包装:颤振/材料.省道”;
导入“包:image_picker/image_picker.dart”;
导入“package:path/path.dart”作为路径;
将“package:path\u provider/path\u provider.dart”作为系统路径导入;
Future\u takePicture()异步{
最终选择器=图像选择器();
final imageFile=wait picker.getImage(
来源:ImageSource.camera,
最大宽度:600,
);
设置状态(){
_storedImage=File(imageFile.path);
});
final appDir=wait syspath.getApplicationDocumentsDirectory();
最终文件名=path.basename(imageFile.path);
final savedImage=wait imageFile.copy('${appDir.path}/$fileName');
}请尝试以下代码:

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');
导入'dart:io';
进口“包装:颤振/材料.省道”;
导入“包:image_picker/image_picker.dart”;
导入“package:path/path.dart”作为路径;
将“package:path\u provider/path\u provider.dart”作为系统路径导入;
Future\u takePicture()异步{
最终选择器=图像选择器();
final imageFile=wait picker.getImage(
来源:ImageSource.camera,
最大宽度:600,
);
设置状态(){
_storedImage=File(imageFile.path);
});
final appDir=wait syspath.getApplicationDocumentsDirectory();
最终文件名=path.basename(imageFile.path);
final savedImage=wait imageFile.copy('${appDir.path}/$fileName');
}