Сохраните путь к файлу ImagePicker и используйте его в качестве фона - PullRequest
0 голосов
/ 08 ноября 2018

Я работаю над приложением флаттера, которое позволяет пользователю устанавливать фоновое изображение по своему выбору и «остается навсегда, пока пользователь не изменит его».

Использование Image.file (selectedImage) временно, если пользователь покинет страницу и вернется обратно, изображение будет отклонено.

Я реализовал средство выбора изображений и попытался сохранить файл изображения в общих настройках, но я ошибся. ImagePicker возвращает файл изображения, а не путь к файлу изображения.

Как получить путь к выбранному файлу изображения и использовать его в качестве фона?

1 Ответ

0 голосов
/ 09 ноября 2018

Когда ImagePicker возвращает файл, он возвращает объект File, как вы заметили. Этот файл является внешним по отношению к приложению и, возможно, временным (то есть он может быть перемещен / удален / и т. Д. В любой момент) - он, вероятно, будет сохраняться некоторое время, но вы не должны на это полагаться.

Вместо этого, после того, как пользователь выбрал изображение, вы должны скопировать его в каталог хранилища вашего приложения, а затем получить к нему доступ.

Для этого следуйте инструкциям в флаттере для чтения / записи файлов документации . Но в основном вам нужно получить локальный каталог с помощью метода getApplicationDocumentsDirectory библиотеки path_provider , затем вызвать 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 из общих свойств и использовать его.

Надеюсь, это поможет =).

...