Когда 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 из общих свойств и использовать его.
Надеюсь, это поможет =).