Tengo un Column
widget con dos TextField
widgets cuando era niño y quiero tener algo de espacio entre ambos.
Ya lo intenté mainAxisAlignment: MainAxisAlignment.spaceAround
, pero el resultado no fue el que quería.
dart
flutter
flutter-layout
Sachin Soma
fuente
fuente
margin: EdgeInsets.only(left: 200.0, top: 300.0))
Respuestas:
Puede usar un
Padding
widget entre esos dos widgets o envolver esos widgets conPadding
widget.Actualizar
El widget SizedBox se puede usar entre dos widgets para agregar espacio entre dos widgets y hace que el código sea más legible que el widget de relleno.
Ex:
Column( children: <Widget>[ Widget1(), SizedBox(height: 10), Widget2(), ], ),
fuente
column
clase tuviera esa propiedad incluida. Será una pérdida de tiempo de codificación para conseguir un relleno entre todos los niños.Padding
widget va entre los 2 widgets. No es que los 2 widgets se conviertan en hijos dePadding
.Puede poner un
SizedBox
con un específicoheight
entre los widgets, así:Column( children: <Widget>[ FirstWidget(), SizedBox(height: 100), SecondWidget(), ], ),
¿Por qué preferir esto a envolver los widgets
Padding
? ¡Legibilidad! Hay menos texto repetitivo visual, menos sangría y el código sigue el orden de lectura típico.fuente
SizedBox
es solo un widget normal que tiene el tamaño deseado que intenta tener durante el diseño, pero no representa nada. Todos los widgets de hoja como Text o Container también están vacíos, así que está bien.puede usar el
Wrap()
widget en su lugarColumn()
para agregar espacio entre los widgets secundarios y usar la propiedad de espaciado para dar un espaciado igual entre los niñosWrap( spacing: 20, // to apply margin in the main axis of the wrap runSpacing: 20, // to apply margin in the cross axis of the wrap children: <Widget>[ Text('child 1'), Text('child 2') ] )
fuente
runSpacing
lugar despacing
para espacios entre elementos espaciados verticalmenteSolo usa relleno para envolverlo así:
Column( children: <Widget>[ Padding( padding: EdgeInsets.all(8.0), child: Text('Hello World!'), ), Padding( padding: EdgeInsets.all(8.0), child: Text('Hello World2!'), ) ]);
También puede utilizar Container (padding ...) o SizeBox (height: xx). El último es el más común, pero dependerá de cómo quieras administrar el espacio de tus widgets, me gusta usar el relleno si el espacio es parte del widget y usar sizebox para listas, por ejemplo.
fuente
Hay muchas formas de hacerlo, aquí enumero algunas.
Usa
Container
y dale algo de altura:Column( children: <Widget>[ Widget1(), Container(height: 10), // set height Widget2(), ], )
Utilizar
Spacer
Column( children: <Widget>[ Widget1(), Spacer(), // use Spacer Widget2(), ], )
Utilizar
Expanded
Column( children: <Widget>[ Widget1(), Expanded(child: SizedBox()), // use Expanded Widget2(), ], )
Utilizar
mainAxisAlignment
Column( mainAxisAlignment: MainAxisAlignment.spaceAround, // mainAxisAlignment children: <Widget>[ Widget1(), Widget2(), ], )
Utilizar
Wrap
Wrap( direction: Axis.vertical, // make sure to set this spacing: 20, // set your spacing children: <Widget>[ Widget1(), Widget2(), ], )
fuente
Spacer crea un espacio flexible para insertar en un widget [Flexible]. (Como una columna)
fuente
De la misma manera que SizedBox se usa arriba con el propósito de la legibilidad del código, puede usar el widget Padding de la misma manera y no tener que convertirlo en un widget padre para ninguno de los hijos de la columna.
Column( children: <Widget>[ FirstWidget(), Padding(padding: EdgeInsets.only(top: 40.0)), SecondWidget(), ] )
fuente
Puede resolver este problema de diferentes maneras.
fuente
Columnas No tiene altura por defecto, puede envolver su columna al contenedor y agregar la altura específica a su contenedor. Entonces puedes usar algo como a continuación:
Container( width: double.infinity,//Your desire Width height: height,//Your desire Height child: Column( mainAxisAlignment: MainAxisAlignment.spaceBetween, children: <Widget>[ Text('One'), Text('Two') ], ), ),
fuente
Aquí hay muchas respuestas, pero pondré aquí la más importante que todos deberían usar.
1. Columna
Column( children: <Widget>[ Text('Widget A'), //Can be any widget SizedBox(height: 20,), //height is space betweeen your top and bottom widget Text('Widget B'), //Can be any widget ], ),
2. Envuelva
Wrap( direction: Axis.vertical, // We have to declare Axis.vertical, otherwise by default widget are drawn in horizontal order spacing: 20, // Add spacing one time which is same for all other widgets in the children list children: <Widget>[ Text('Widget A'), // Can be any widget Text('Widget B'), // Can be any widget ] )
fuente
Column(children: <Widget>[ Container(margin: EdgeInsets.only(top:12, child: yourWidget)), Container(margin: EdgeInsets.only(top:12, child: yourWidget)) ]);
fuente
Puede que tenga que usar el widget SizedBox () entre los hijos de su columna. Espero que te sea de utilidad
fuente
La caja de tamaño no ayudará en el caso, el teléfono está en modo horizontal.
body: Column( mainAxisAlignment: MainAxisAlignment.spaceBetween, crossAxisAlignment: CrossAxisAlignment.stretch, children: <Widget>[ Expanded( child: Container( margin: EdgeInsets.all(15.0), decoration: BoxDecoration( color: Color(0xFF1D1E33), borderRadius: BorderRadius.circular(10.0), ), ), ), Expanded( child: Container( margin: EdgeInsets.all(15.0), decoration: BoxDecoration( color: Color(0xFF1D1E33), borderRadius: BorderRadius.circular(10.0), ), ), ), Expanded( child: Container( margin: EdgeInsets.all(15.0), decoration: BoxDecoration( color: Color(0xFF1D1E33), borderRadius: BorderRadius.circular(10.0), ), ), ), ], )
fuente