2
votes

Comment convertir une image en fichier dans Flutter?

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) .


1 commentaires

@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.


3 Réponses :


1
votes

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;


5 commentaires

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.



-1
votes

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'; 


0 commentaires

2
votes

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),
}


0 commentaires