Sauvegarder les images en local sur IOs

Bonjour,

J’utilise une base de donnée local pour mon app et je souhaite enregistrer des images (type image de profil).

J’utilise pour ça la lib image_picker. Tout fonctionne très bien sur l’émulateur Android par contre ça bug sur iOS :

Pour sauvegarder l’image j’utilise le path de l’image que je stock dans un string de mon objet.
Tout va bien pour sélectionner l’image, la faire apparaître, sauvegarder le path puis la conserver pendant que l’App tourne. Par contre si j’arrête l’application et que je relance la ça freeze. (Encore une fois que sur iOS, sur Android tout va bien)

J’ai bien mis les autorisations d’accès à la caméra et a la galerie d’images dans le info.plist. Et je sauvegarde les donnees de l’image en utilisant la localisation donnée par getApplicationDocumentsDirectory():

  Future<File> saveImagePermanently(String imagePath) async {
    final directory = await getApplicationDocumentsDirectory();
    final name = basename(imagePath);
    final image = File('${directory.path}/$name');
    return File(imagePath).copy(image.path);
  }

Pour le pick image voici le code :

Future pickImage() async {
    try {
      final image = await ImagePicker().pickImage(source: ImageSource.gallery);
      if (image == null) {
        return null;
      }
      final imagePermanent = await saveImagePermanently(image.path);
      return imagePermanent.path;
    } on PlatformException {
      return null;
    }
  }

Et dans ma view voici le code qui retourne l’image :

  Image get profilePic {
    final MyObject? objectToCheck = object;
    if (objectToCheck != null) {
      _path = objectToCheck.profilePic;
    }
    const double sidesProfilePic = 130;
    final String? imagePath = _path;
    if (imagePath != null) {
      return Image.file(
        File(imagePath),
        height: sidesProfilePic,
        width: sidesProfilePic,
        fit: BoxFit.cover,
      );
    } else {
      return Image(
        image: AssetImage(_fakePic),
        height: sidesProfilePic,
        width: sidesProfilePic,
        fit: BoxFit.cover,
      );
    }
  }

Est ce que ce problème rappelle quelque chose a quelqu’un ? :slight_smile:

Je mets à jour ce sujet avec ma compréhension du problème :
Une fois que l’application est compilée sur un appareil au sur un émulateur IOS. Si je ferme l’application et que je la relance, il n’y a pas de freeze. Je peux accéder à l’image mise en place et la changer sans problème.

Par contre si j’arrête le compilateur et que je relance le build, la ca freeze.

Mon intuition :
Je pense que le problème se situe au niveau des autorisations que demande IOS. En recompilant l’app, les autorisations ne doivent plus être demandées car elles ont été demandé auparavant et acceptées. Le fait de recompiler l’app doit cependant changer quelque chose dans ce que l’OS detecte vis à vis des autorisations d’accès accordées.

En gros, je pense que ca ne pose pas de problème pour déployer la fonctionalité, mais c’est par contre super pénible pour le développement.

Si quelqu’un a des solutions ou une meilleure connaissance de ce problème que moi, ca serait super de partager l’info :slight_smile:

Ca me paraît étrange qu’une recompilation fasse ça mais c’est peut être un bug.
Est-ce que tu peux voir le fichier dans les dossiers de ton simulateur quand l’app bugge ?

Quand je fais ca j’utilise les photos dispo dans l’émulateur (la fontaine, les fleurs…) donc je dirai que oui. Il y a un endroit où vérifier ça ?

J’utilise en général iSimulator pour accéder aux fichiers du simulateur iOS.
j’en avais parlé ici d’ailleurs :