Estoy tratando de construir una página de inicio de sesión simple para mi aplicación Flutter. He creado con éxito los botones TextFields y Login / Signin. Quiero agregar un ListView horizontal. Cuando ejecuto el código, mis elementos desaparecen, si lo hago sin ListView, está bien de nuevo. ¿Cómo puedo hacer esto correctamente?
return new MaterialApp(
home: new Scaffold(
appBar: new AppBar(
title: new Text("Login / Signup"),
),
body: new Container(
child: new Center(
child: new Column(
mainAxisAlignment: MainAxisAlignment.center,
children: <Widget>[
new TextField(
decoration: new InputDecoration(
hintText: "E M A I L A D D R E S S"
),
),
new Padding(padding: new EdgeInsets.all(15.00)),
new TextField(obscureText: true,
decoration: new InputDecoration(
hintText: "P A S S W O R D"
),
),
new Padding(padding: new EdgeInsets.all(15.00)),
new TextField(decoration: new InputDecoration(
hintText: "U S E R N A M E"
),),
new RaisedButton(onPressed: null,
child: new Text("SIGNUP"),),
new Padding(padding: new EdgeInsets.all(15.00)),
new RaisedButton(onPressed: null,
child: new Text("LOGIN"),),
new Padding(padding: new EdgeInsets.all(15.00)),
new ListView(scrollDirection: Axis.horizontal,
children: <Widget>[
new RaisedButton(onPressed: null,
child: new Text("Facebook"),),
new Padding(padding: new EdgeInsets.all(5.00)),
new RaisedButton(onPressed: null,
child: new Text("Google"),)
],)
],
),
),
margin: new EdgeInsets.all(15.00),
),
),
);
fuente
Yo también tengo este problema. Mi solución es usar el
Expanded
widget para expandir el espacio restante.fuente
Razón del error:
Column
se expande al tamaño máximo en la dirección del eje principal (eje vertical), y también lo haceListView
.Soluciones
Por lo tanto, debe restringir la altura del
ListView
. Hay muchas formas de hacerlo, puedes elegir la que mejor se adapte a tus necesidades.Si desea permitir
ListView
que ocupe todo el espacio interior restante,Column
utiliceExpanded
.Si desea limitar su
ListView
a ciertoheight
, puede utilizarSizedBox
.Si
ListView
es pequeño, puede probarshrinkWrap
propiedades en él.fuente
Tengo
SingleChildScrollView
como padre, unColumn
widget y luego un widget de vista de lista como último hijo.Agregar estas propiedades en la vista de lista funcionó para mí.
fuente
El widget expandido aumenta su tamaño tanto como puede con el espacio disponible. Dado que ListView esencialmente tiene una altura infinita, provocará un error.
Aquí deberíamos usar el widget flexible, ya que solo ocupará el espacio que requirió como expandido, tomar pantalla completa, incluso si no hay suficientes widgets para renderizar en pantalla completa.
fuente
En realidad, cuando lee documentos, ListView debe estar dentro del widget expandido para que pueda funcionar.
}
fuente
Como otros han mencionado anteriormente, Wrap listview with Expanded es la solución.
Pero cuando trabaje con columnas anidadas, también deberá limitar su ListView a una cierta altura (enfrentó mucho este problema).
Si alguien tiene otra solución, mencione en el comentario o agregue una respuesta.
Ejemplo
fuente
Puede utilizar
Flex
yFlexible
widgets. por ejemplo:);
fuente
fuente
Intente usar Slivers:
fuente