Partage
  • Partager sur Facebook
  • Partager sur Twitter

Flutter 2 problèmes de types

    3 août 2021 à 12:10:25

    Bonjour à tous, 

    J'ai deux problèmes que je n'arrive pas à corriger malgré mes recherches sur Flutter.

    Voici le message du premier avec son code

    Non-nullable instance field 'imgFile' must be initialized.
    Try adding an initializer expression, or a generative constructor that initializes it, or mark it 'late'
      Future<File> imgFile;

    Et le message du deuxième avec son code

    A value of type 'Future<XFile?>' can't be assigned to a variable of type 'Future<File>'.
    Try changing the type of the variable, or casting the right-hand type to 'Future<File>'
    imgFromGallery(ImageSource source) {
        setState(() {
          imgFile = ImagePicker.pickImage(source: source);
        });
      }

    Voici mon code en entier

    import 'package:flutter/material.dart';
    import 'package:image_picker/image_picker.dart';
    import 'dart:io';
    
    class ImgVidPicker extends StatefulWidget {
      ImgVidPicker(): super();
    
      @override
      _ImgVidPicker createState() => _ImgVidPicker();
    }
    
    class _ImgVidPicker extends State<ImgVidPicker>{
      Future<File> imgFile;
    
      imgFromGallery(ImageSource source) {
        setState(() {
          imgFile = ImagePicker.pickImage(source: source);
        });
      }
      
      Widget showImage(){
        return FutureBuilder<File>(
          future: imgFile,
          builder: (BuildContext context, AsyncSnapshot<File>snapshot){
            if(snapshot.connectionState == ConnectionState.done && snapshot.data != null){
              return Image.file(
                snapshot.data!,
                width: 1800,
                height: 1800,
              );
            }else if (snapshot.error != null){
              return const Text("An error occured.");
            }else{
              return const Text("No image selected.");
            }
          },
        );
      }
    
      @override
        Widget build(BuildContext context) {
          return Form(
            child: Column(children: [
              showImage(),
              ElevatedButton(
                onPressed: (){
                  imgFromGallery(ImageSource.gallery);
                },
                child: RichText(
                  text: const TextSpan(
                    children: [
                      WidgetSpan(
                        child: Icon(Icons.add_box),
                      ),
                      TextSpan(text: " Images / Videos"),
                    ],
                  ),
                ),
              ),
            ],)
          );
        }
    }
    


    Merci d'avance

    Edit : J'ai trouvé une solution, j'ai juste rajouté le symbole "?" devant les variables

    Ce qui donne Future<File> ?imgFile;

    Par contre je cherche encore pour le deuxième problème

    -
    Edité par chubbymarschmallow 3 août 2021 à 14:50:05

    • Partager sur Facebook
    • Partager sur Twitter
      4 août 2021 à 9:36:46

      Salut, pourquoi ne pas mettre Future<XFile>?
      • Partager sur Facebook
      • Partager sur Twitter
        4 août 2021 à 11:52:54

        Hello ! Le problème avec XFile c'est que je ne peux pas récupérer les images après parce qu'il faut du File.

        D'ailleurs je suis un peu perdue à ce propos parce qu'ImagePicker nécessite du XFile mais quand on veut utiliser l'image il nous demande du File.

        Ce qui fait que je tourne en boucle malgré les solutions que je cherche

        Ce que je cherche à faire : Chercher une image dans la gallerie et l'afficher ensuite

        • Partager sur Facebook
        • Partager sur Twitter
          4 août 2021 à 17:32:07

          Ok. Et File file = File(imgFile.path) ?

          Ou imgFile = File(tonTruc.path)

          -
          Edité par Geda 4 août 2021 à 17:32:54

          • Partager sur Facebook
          • Partager sur Twitter
            5 août 2021 à 11:39:11

            La première solution ne marche pas, encore à cause de cette histoire de non nullable sécurité, mais cette fois-ci "?" ne marche pas

            Et pour la deuxième solution il faudrait que je mette un chemin par défaut ? 

            • Partager sur Facebook
            • Partager sur Twitter
              5 août 2021 à 19:01:30

              Non. C’est la même chose appliqué a ton context. Le premier truc est plus generique.

              ce que j’ai appellé tonTruc c’est le machin avec imagePicker que j’avais la flemme de recopier. 

              Cherche comme unwrapped un optional. D’ailleurs, regarde ce qu’est un optional, ça t’aidera à comprendre un peu plus je pense. Et c’est super important. 

              • Partager sur Facebook
              • Partager sur Twitter

              Flutter 2 problèmes de types

              × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
              × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
              • Editeur
              • Markdown