98 votes

Flutter: hauteur minimale sur la vue de liste horizontale

Je suis en train de créer un défilement horizontal de la liste des éléments dans le battement, et je veux que la liste de ne prendre que le nécessaire la hauteur en fonction de ses enfants. De par leur conception "ListView tente de développer pour s'adapter à l'espace disponible dans son contre-sens" (du Flutter docs), que j'ai aussi l'avis qu'il occupe toute la hauteur de la fenêtre d'affichage, mais est-il une façon de faire ne pas le faire? Idéalement quelque chose de similaire à ceci (qui évidemment ne fonctionne pas):

new ListView(
  scrollDirection: Axis.horizontal,
  crossAxisSize: CrossAxisSize.min,
  children: <Widget>[
    new ListItem(),
    new ListItem(),
    // ...
  ],
);

Je me rends compte que la seule façon de le faire est par emballage de la ListView en Container avec une hauteur fixe. Cependant, je n'ai pas forcément connaître la hauteur des éléments:

new Container(
  height: 97.0,
  child: new ListView(
    scrollDirection: Axis.horizontal,
    children: <Widget>[
      new ListItem(),
      new ListItem(),
      // ...
    ],
  ),
);

J'ai été en mesure de pirater ensemble une "solution" par nidification Row en SingleChildScrollView en Column avec un mainAxisSize: MainAxisSize.min. Toutefois, cela ne ressemble pas à une solution, pour moi:

new Column(
  mainAxisSize: MainAxisSize.min,
  children: <Widget>[
    new SingleChildScrollView(
      scrollDirection: Axis.horizontal,
      child: new Row(
        children: <Widget>[
          new ListItem(),
          new ListItem(),
          // ...
        ],
      ),
    ),
  ],
);

43voto

Taha Ali Points 58

Définissez simplement la propriété shrink de ListView à true et elle s'adaptera à l'espace plutôt que de s'agrandir.

Exemple:

 ListView(
        shrinkWrap: true, //just set this property
        padding: const EdgeInsets.all(8.0),
        children: listItems.toList(),
      ),
 

20voto

Utilisez ConstrainedBox pour définir minHeight et maxHeight

 ConstrainedBox(
  constraints: new BoxConstraints(
    minHeight: 35.0,
    maxHeight: 160.0,
  ),

  child: new ListView(
    shrinkWrap: true,
    children: <Widget>[
      new ListItem(),
      new ListItem(),
    ],

  ),
)
 

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X