J'essaie de créer une liste d'éléments à défilement horizontal dans Flutter, et je souhaite que cette liste n'occupe que la hauteur nécessaire en fonction de ses enfants. Par conception "ListView
essaie de s’agrandir pour s’adapter à l’espace disponible dans son sens transversal" (de Flutter docs ), ce que j’ai aussi remarqué en ce sens qu’il occupe toute la surface. hauteur de la fenêtre d'affichage, mais existe-t-il un moyen de 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 l’une des façons de le faire est d’envelopper ListView
dans un Container
avec une hauteur fixe. Cependant, je ne connais pas nécessairement la hauteur des objets:
new Container(
height: 97.0,
child: new ListView(
scrollDirection: Axis.horizontal,
children: <Widget>[
new ListItem(),
new ListItem(),
// ...
],
),
);
J'ai pu pirater une "solution" en imbriquant un Row
dans un SingleChildScrollView
dans un Column
avec un mainAxisSize: MainAxisSize.min
. Cependant, cela ne me semble pas une solution:
new Column(
mainAxisSize: MainAxisSize.min,
children: <Widget>[
new SingleChildScrollView(
scrollDirection: Axis.horizontal,
child: new Row(
children: <Widget>[
new ListItem(),
new ListItem(),
// ...
],
),
),
],
);
Il suffit de définir la propriété shrink
de ListView
sur true
et elle occupera l’espace au lieu de s’agrandir.
Exemple:
ListView(
shrinkWrap: true, //just set this property
padding: const EdgeInsets.all(8.0),
children: listItems.toList(),
),
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(),
],
),
)