J'essaie d'enregistrer une photo de la caméra sur un appareil réel, mais je ne trouve pas de moyen.
À l'heure actuelle, je l'ai enregistré dans un fichier, mais je ne peux pas l'obtenir dans la galerie.
Mon code pour le moment est:
File _imagenTemporal; String _opcion = ""; var imagen; Future getImagen(String opcion) async { if (opcion == "camara") { imagen = await ImagePicker.pickImage(source: ImageSource.camera); } else if (opcion == "galeria") { imagen = await ImagePicker.pickImage(source: ImageSource.gallery); } setState(() { _imagenTemporal = imagen; }); }
6 Réponses :
Vous pouvez conserver l ' Chemin vers le stockage local: Copiez le fichier Ces Image
prise à l'aide du plug-in du fournisseur de chemin de google a>:
File savedImage = await imagen.copy('$path/saved_image.jpg');
imagen
dans le chemin que vous avez obtenu à l'étape précédente en utilisant la fonction copy
: directory = getApplicationDocumentsDirectory() // AppData folder path
directory = getExternalStorageDirectory() // main storage folders path,but only works on android as IOS is not currently supported.
path = directory.path ;
images
stockées par cette méthodologie sont accessibles à l'aide de votre application Files
et indexées dans votre Galerie
ou Application Photos
en fonction de la plate-forme. Vous pouvez trouver plus d'informations sur livre de recettes officiel lire et écrire des fichiers et documentation sur l'API du fournisseur de chemins .
Utilisez ensuite getApplicationDocumentsDirectory ()
, mais vous devez tester si l'image apparaîtra dans votre application Photos
.
Je viens d'écrire album_saver pour ce plugin
Cela peut fonctionner sur les deux IOS et Android.
import 'package:album_saver/album_saver.dart'; import 'package:image_picker/image_picker.dart'; File image = await ImagePicker.pickImage(source: ImageSource.gallery); // Save to ablum AlbumSaver.saveToAlbum(filePath: image.path, albumName: "YourAlbumName"); // Create album // In Android, it will create a folder in DCIM folder AlbumSaver.createAlbum(albumName: "YourAlbumName"); // Get DCIM folder path (just work on Android) AlbumSaver.getDcimPath();
@MuhammadFaizan Oui, cela fonctionnera avec ImageSource.camera
Ce plugin https://pub.dev/packages/gallery_saver enregistre les images et les vidéos de la caméra ou du réseau vers le stockage local (Android et iOS)
Voici comment il est utilisé:
GallerySaver.saveVideo(path) GallerySaver.saveImage(path)
chemin est le chemin local ou l'URL du réseau.
Il renvoie Future - vrai s'il a été enregistré avec succès et faux s'il ne l'a pas été (pour une raison quelconque).
C'était de loin la solution la plus simple pour moi, merci - fonctionne sur mon téléphone Android
* Ma solution à ce problème est SharedPreferences - stockez FileName.path en tant que chaîne et restaurez dans File (chemin); peut-être que cela aidera quelqu'un *
//global variables: File imageFile; String finalPath; //store string value Future<void> storeSharedPrefs(String key, String value) async { final prefs = await SharedPreferences.getInstance(); await prefs.setString(key, value); } //restore string value Future<String> restoreSharedPrefs(String key, String inputValue) async { final prefs = await SharedPreferences.getInstance(); final value = prefs.getString(key); if (value == null) { return null; } setState(() { inputValue = value; }); return inputValue; } //load saves void loadPrefs() async { try { //restore saved shared prefs: finalPath = await restoreSharedPrefs('image', finalPath); //load imageFile with restored shared prefs path: this.setState(() { if (finalPath != null) imageFile = File(finalPath); }); debugPrint('restored path is: $finalPath'); } catch (e) { print('loading error: $e'); } } @override void initState() { super.initState(); loadPrefs(); }
J'ai essayé beaucoup de plugins de flutter pour enregistrer l'image, et seul celui-ci fonctionne. Gallery_saver v1.0.7
Mais l'exemple contient une petite erreur qui explique pourquoi je n'ai pas pu exécuter. Voici l'exemple correct:
import 'dart:io'; import 'package:flutter/material.dart'; import 'package:gallery_saver/gallery_saver.dart'; import 'package:image_picker/image_picker.dart'; void main() => runApp(MyApp()); class MyApp extends StatefulWidget { @override _MyAppState createState() => _MyAppState(); } class _MyAppState extends State<MyApp> { String firstButtonText = 'Take photo'; String secondButtonText = 'Record video'; double textSize = 20; @override Widget build(BuildContext context) { return MaterialApp( home: Scaffold( body: Container( color: Colors.white, child: Column( children: <Widget>[ Flexible( flex: 1, child: Container( child: SizedBox.expand( child: RaisedButton( color: Colors.blue, onPressed: _takePhoto, child: Text(firstButtonText, style: TextStyle(fontSize: textSize, color: Colors.white)), ), ), ), ), Flexible( child: Container( child: SizedBox.expand( child: RaisedButton( color: Colors.white, onPressed: _recordVideo, child: Text(secondButtonText, style: TextStyle( fontSize: textSize, color: Colors.blueGrey)), ), )), flex: 1, ) ], ), ), )); } void _takePhoto() async { ImagePicker.pickImage(source: ImageSource.camera).then((File recordedImage) { if (recordedImage != null && recordedImage.path != null) { setState(() { firstButtonText = 'saving in progress...'; }); GallerySaver.saveImage(recordedImage.path).then((path) { setState(() { firstButtonText = 'image saved!'; }); }); } }); } void _recordVideo() async { ImagePicker.pickVideo(source: ImageSource.camera) .then((File recordedVideo) { if (recordedVideo != null && recordedVideo.path != null) { setState(() { secondButtonText = 'saving in progress...'; }); GallerySaver.saveVideo(recordedVideo.path).then((path) { setState(() { secondButtonText = 'video saved!'; }); }); } }); } }
pickImage est obsolète. Vous devez utiliser ImagePicker.getImage ().
Utilisez le code ci-dessous pour stocker la photo de l'appareil photo ou de la galerie.
//getImage(ImageSource.camera) or getImage(ImageSource.gallery) void getImage(ImageSource imageSource) async { PickedFile imageFile = await picker.getImage(source: imageSource); if (imageFile == null) return; File tmpFile = File(imageFile.path); final appDir = await getApplicationDocumentsDirectory(); final fileName = basename(imageFile.path); localFile = await tmpFile.copy('${appDir.path}/$fileName'); setState(() { _image = localFile; }); }