web-dev-qa-db-fra.com

Flutter: hauteur minimale en mode liste horizontale

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(),
          // ...
        ],
      ),
    ),
  ],
);
36
sindrenm

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(),
      ),
9
Taha Ali

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(),
    ],

  ),
)
5
Davit Varamashvili