Je suis vraiment confus. Le flottement est génial mais un peu de temps est coincé dans l'esprit
Tout le code est fait. le fichier sélectionné s'affiche également en aperçu, mais j'essaie d'enregistrer ce fichier dans le stockage local Android. Je ne peux pas réussir dans
Future getImage(ImageSource imageSource) async {
var image = await ImagePicker.pickImage(source: imageSource);
setState(() {
_image = image;
});
}
Sélectionnez le fichier à l'aide de ce code et mon fichier dans _image
maintenant j'essaye de stocker en utilisant path_provider et Dart.io
mais je ne parviens pas à enregistrer la méthodologie.
En utilisant await ImagePicker.pickImage(...)
, vous êtes déjà sur la bonne voie car la fonction renvoie un File
.
La classe File
a une méthode copy
, que vous pouvez utiliser pour copier le fichier (qui est déjà enregistré sur le disque par l'appareil photo ou en se trouvant dans la galerie) et placez-le dans votre répertoire de documents d'application:
// using your method of getting an image
final File image = await ImagePicker.pickImage(source: imageSource);
// getting a directory path for saving
final String path = await getApplicationDocumentsDirectory().path;
// copy the file to a new path
final File newImage = await image.copy('$path/image1.png');
setState(() {
_image = newImage;
});
Vous devez également noter que vous pouvez obtenir le chemin du fichier image à partir de ImagePicker
en utilisant image.path
, qui contiendra également la fin du fichier que vous voudrez peut-être extraire et vous pouvez enregistrer votre chemin d'image en utilisant newImage.path
.
La réponse @creativecreatorormaybenot est vraiment utile, mais elle a manqué une partie importante, à savoir la récupération de l'image pour une utilisation ultérieure.
Enregistrement d'image
// Step 1: Retrieve image from picker
final File image = await ImagePicker.pickImage(source: imageSource);
// Step 2: Check for valid file
if (image == null) return;
// Step 3: Get directory where we can duplicate selected file.
final String path = await getApplicationDocumentsDirectory().path;
// Step 4: Copy the file to a application document directory.
final var fileName = basename(file.path);
final File localImage = await image.copy('$path/$fileName');
Astuce: vous pouvez récupérer nom de fichier à partir du fichier d'origine en utilisant nom de base (file.path). Assurez-vous d'importer 'package: path/path.Dart';
Récupération/chargement de l'image
// Step 1: Save image/file path as string either db or shared pref
SharedPreferences prefs = await SharedPreferences.getInstance();
prefs.setString('test_image', localImage.path)
// Step 2: Loading image by using the path that we saved earlier. We can create a file using path
// and can use FileImage provider for loading image from file.
CircleAvatar(
backgroundImage: FileImage(File(prefs.getString('test_image')),
radius: 50,
backgroundColor: Colors.white)