J'écris ce code de flutter où j'ai Image dans un widget Image et je souhaite le convertir en fichier afin de pouvoir le télécharger sur Firebase Storage.
Image _image = Image.asset('assets\images\profile.png'); File _fileImage = convertToFile(_image); //upload _fileImage to Firebase Storage code
J'ai besoin de la fonction File convertToFile(Image img)
.
3 Réponses :
Vous devez convertir l'élément et non l'image
Vous devez installer le plugin path_provider
var bytes = await rootBundle.load('assets\images\profile.png'); String tempPath = (await getTemporaryDirectory()).path; File file = File('$tempPath/profile.png'); await file.writeAsBytes(bytes.buffer.asUint8List(bytes.offsetInBytes, bytes.lengthInBytes)); return file;
Ne marche pas. Lève cette erreur. [ERREUR: flutter / lib / ui / ui_dart_state.cc (157)] Exception non gérée: FileSystemException: impossible d'ouvrir le fichier, path = '/data/user/0/com.example.xyz/cache/images/profile.png' ( Erreur du système d'exploitation: aucun fichier ou répertoire de ce type, errno = 2)
essayez de remplacer le \ par /
Obtenir cette erreur. Il renvoie null. L'assertion suivante a été lancée lors de la construction de UserSignUpScreen (sale, état: _UserSignUpScreenState # e96f8): 'package: flutter / src / painting / image_provider.dart': Échec de l'assertion: ligne 826 pos 14: 'file! = Null': n'est pas vrai.
trouvé le problème, supprimez l'image / du constructeur de fichier, j'ai modifié la réponse
comment créer des png en jpg, veuillez suggérer. Merci.
J'ai eu exactement le même problème et j'ai utilisé ce guide: https://medium.com/@mrgulshanyadav/convert-image-url-to-file-format-in-flutter-10421bccfd18 (écrit par Gulshan Yadav)
En utilisant ces importations:
Future<File> urlToFile(String imageUrl) async { // generate random number. var rng = new Random(); // get temporary directory of device. Directory tempDir = await getTemporaryDirectory(); // get temporary path from temporary directory. String tempPath = tempDir.path; // create a new file in temporary path with random file name. File file = new File('$tempPath'+ (rng.nextInt(100)).toString() +'.png'); // call http.get method and pass imageUrl into it to get response. http.Response response = await http.get(imageUrl); // write bodyBytes received in response to file. await file.writeAsBytes(response.bodyBytes); // now return the file which is created with random name in // temporary directory and image bytes from response is written to // that file. return file; }
Et cette fonction:
import 'package:http/http.dart' as http; import 'package:path_provider/path_provider.dart'; import 'dart:io'; import 'dart:math';
Un merci spécial à Sami Kanafani .
Ceci est ma solution (fonctionne parfaitement pour moi):
import 'dart:async'; import 'dart:io'; import 'package:flutter/services.dart'; import 'package:path_provider/path_provider.dart'; class ImageUtils { static Future<File> imageToFile({String imageName, String ext}) async { var bytes = await rootBundle.load('assets/$imageName.$ext'); String tempPath = (await getTemporaryDirectory()).path; File file = File('$tempPath/profile.png'); await file.writeAsBytes( bytes.buffer.asUint8List(bytes.offsetInBytes, bytes.lengthInBytes)); return file; } } class AnotherClass { File imagePlaceHolder; _setPlaceHolder() async { this.imagePlaceHolder = await ImageUtils.imageToFile( imageName: "photo_placeholder", ext: "jpg"); } ... Image.file(this.imagePlaceHolder), }
@Uni Je ne sélectionne pas d'image à partir de photos ou d'un appareil photo. Il est présent dans le dossier des ressources.