1
votes

ListView.builder montre quoi que ce soit

AlertCardWidget est un widget que j'ai écrit. Je le retourne dans itemBuilder mais rien ne s'affiche. Voici mon code:

       Flexible(
         child: Padding(
           child: SingleChildScrollView(
                  child: ListView.builder(
                        itemCount: state.data.length,
                        itemBuilder: (BuildContext context, int index) {

                    state.data["datas"].map<Widget>((f) {

                          return AlertCardWidget(
                            positionId: "${f["8020074"]}",
                            shipowner: "${f["8020076"]}",
                            customer: "${f["8020170"]}",
                            salesRepresenter: "${f["8020176"]}",
                            operationRepresenter: "${f["8020177"]}",
                            textContentFontColor:
                                AppTheme(Theme.of(context).brightness)
                                    .cardFontBackgroundColor,
                            textfont: Colors.redAccent,
                          );
                        }).toList();
                      },
                    ),
                  ),
                ),
              ),

Aucune erreur à afficher.


0 commentaires

3 Réponses :


0
votes

Votre fonction itemBuilder ne renvoie pas de valeur.

Edit: Elle doit renvoyer un seul widget pour chaque entrée de votre liste. Quelque chose comme ça devrait fonctionner. De plus, le widget Padding ne contient pas la propriété padding.

   Flexible(
     child: Padding(
       child: SingleChildScrollView(
              child: ListView.builder(
                    itemCount: state.data.length,
                    itemBuilder: (BuildContext context, int index) {

                     final f  = state.data[index];

                      return AlertCardWidget(
                        positionId: "${f["8020074"]}",
                        shipowner: "${f["8020076"]}",
                        customer: "${f["8020170"]}",
                        salesRepresenter: "${f["8020176"]}",
                        operationRepresenter: "${f["8020177"]}",
                        textContentFontColor:
                            AppTheme(Theme.of(context).brightness)
                                .cardFontBackgroundColor,
                        textfont: Colors.redAccent,
                      );
                  },
                ),
              ),
            ),
          ),


2 commentaires

Pouvez-vous montrer tout le code, en particulier la classe d'état? L'itemBuilder doit renvoyer un seul widget pour chaque entrée de la liste, pas une liste de widgets.


Oui vous avez raison. l'état n'est pas une classe. C'est un état en bloc. J'ai résolu le problème. Partage maintenant.



0
votes

Peut-être une question idiote, mais pourquoi mappez-vous une liste dans un ListView.builder? Avez-vous essayé d'utiliser l'index pour chaque itération à la place? Parce que ce que je comprends de ce code, c'est que chaque élément ["datas"] que vous avez générera la liste entière autant de fois que state.data.length .

Essayez peut-être ceci:

Flexible(
     child: Padding(
       child: SingleChildScrollView(
              child: ListView.builder(
                    itemCount: state.data.length,
                    itemBuilder: (BuildContext context, int index) {
                      return AlertCardWidget(
                        positionId: state.data[index]["datas"]["8020074"],
                        shipowner: state.data[index]["datas"]["8020076"],
                        customer: state.data[index]["datas"]["8020170"],
                        salesRepresenter: state.data[index]["datas"]["8020176"],
                        operationRepresenter: state.data[index]["datas"]["8020177"],
                        textContentFontColor:
                            AppTheme(Theme.of(context).brightness)
                                .cardFontBackgroundColor,
                        textfont: Colors.redAccent,
                      );
                  },
                ),
              ),
            ),
          ),

Si cela ne fonctionne pas, pourriez-vous nous montrer quelles données essayez-vous de récupérer?

p>


1 commentaires

La raison de l'utilisation de listview.builder est prise "La fenêtre verticale a reçu une erreur de hauteur illimitée" à listview. state.data ["datas"] a une valeur dynamique de 1000, c'est pourquoi je n'ai pas écrit d'entité pour elle. Je sais que ce n'est pas le bon codage mais je n'ai pas écrit toute l'architecture. J'étais en train de passer et je viens d'inclure :)) Et je l'ai réparé. Partagera maintenant. Merci mon pote



3
votes

J'ai des éléments pour lesquels j'utilise ListView . Le problème de l'utilisation de Listview à la place de ListView.builder prend "une erreur de hauteur illimitée dans la fenêtre verticale". Le problème a été résolu lors de l'écriture de Listview comme enfant du widget Expanded . Voici mon code:

Expanded(
  child: Padding(
    padding: const EdgeInsets.all(4.0),
    child: ListView(
      children: state.data["datas"].map<Widget>((f) => AlertCardWidget(positionId: "${f["8020074"]}",
        shipowner: "${f["8020076"]}",
        customer: "${f["8020170"]}",
        salesRepresenter: "${f["8020176"]}",
        operationRepresenter: "${f["8020177"]}",
        textContentFontColor: AppTheme(Theme.of(context).brightness).cardFontBackgroundColor,
        textfont: Colors.redAccent,)).toList(),
    ),

  ),
),


0 commentaires