En Android match_parent
y wrap_content
se utilizan para cambiar el tamaño de los widgets automáticamente en relación con su padre al contenido que contiene el widget.
En Flutter, parece que todos los widgets están configurados de wrap_content
forma predeterminada , ¿cómo lo cambiaría para poder completar el suyo width
y height
el de su padre?
Enlace del artículo original
fuente
crossAxisAlignment
campo en Filas y Columnas que se puede configurarCrossAxisAlignment.stretch
para expandirse horizontalmente dentro de una Columna, por ejemploLa respuesta corta es que el padre no tiene un tamaño hasta que el niño tiene un tamaño.
La forma en que funciona el diseño en Flutter es que cada widget proporciona restricciones a cada uno de sus elementos secundarios, como "puedes tener este ancho, debes ser tan alto, debes tener al menos este ancho", o lo que sea (específicamente, ellos obtener un ancho mínimo, un ancho máximo, una altura mínima y una altura máxima). Cada niño toma esas restricciones, hace algo y elige un tamaño (ancho y alto) que coincide con esas restricciones. Luego, una vez que cada niño ha hecho lo suyo, el widget puede elegir su propio tamaño.
Algunos widgets intentan ser tan grandes como lo permiten los padres. Algunos widgets intentan ser tan pequeños como lo permiten los padres. Algunos widgets intentan coincidir con un cierto tamaño "natural" (por ejemplo, texto, imágenes).
Algunos widgets les dicen a sus hijos que pueden tener el tamaño que deseen. Algunos les dan a sus hijos las mismas limitaciones que les dieron sus padres.
fuente
PageView
dentro de aColumn
, con otroColumn
dentro de la corrientepage
, obtengo un error de representación, pero puedo solucionarlo envolviendo elPageView
interior de unExpanded
o aFlexible
. El problema es que esas 2 opciones solo amplían a su hijo. ¿Por qué no hay un widget relacionado para encoger y ajustar, como "envolver contenido", para resolver este tipo de problemas de renderizado?En realidad, hay algunas opciones disponibles:
Puede usar SizedBox.expand para hacer que su widget coincida con las dimensiones de los padres, o SizedBox (ancho: double.infinity) para que coincida solo con el ancho o SizedBox (heigth: double.infinity) para que coincida solo con la altura.
Si desea un comportamiento de wrap_content, depende del widget principal que esté utilizando, por ejemplo, si coloca un botón en una columna, se comportará como wrap_content y, para usarlo como match_parent, puede envolver el botón con un widget expandido o una caja de tamaño.
Con ListView, el botón obtiene un comportamiento match_parent y para obtener un comportamiento wrap_content, puede envolverlo con un widget Flex como Row.
El uso de un widget expandido hace que un elemento secundario de una fila, columna o flex se expanda para llenar el espacio disponible en el eje principal (por ejemplo, horizontalmente para una fila o verticalmente para una columna). https://docs.flutter.io/flutter/widgets/Expanded-class.html
El uso de un widget flexible le da a un hijo de una fila, columna o flex la flexibilidad de expandirse para llenar el espacio disponible en el eje principal (p. Ej., Horizontalmente para una fila o verticalmente para una columna), pero, a diferencia de Expandido, Flexible no lo hace. requiera que el niño llene el espacio disponible. https://docs.flutter.io/flutter/widgets/Flexible-class.html
fuente
Una solución sencilla:
Si un contenedor tiene solo un hijo de nivel superior, puede especificar la propiedad de alineación para el hijo y darle cualquier valor disponible. llenará todo el espacio del contenedor.
De otra manera:
fuente
BoxConstraints.expand(height: 100.0)
funciona muy bien comowidth="match_parent"
equivalente de AndroidUsé esta solución, debes definir la altura y el ancho de tu pantalla usando MediaQuery:
fuente
fuente
Usa el widget
Wrap
.Para
Column
un comportamiento similar, intente:Para
Row
un comportamiento similar, intente:Para obtener más información: Wrap (Flutter Widget)
fuente
Utilice esta línea de códigos dentro de la columna. Para wrap_content:
mainAxisSize: MainAxisSize.min
para match_parent:mainAxisSize: MainAxisSize.max
fuente
En realidad, existe una forma muy sencilla y ordenada de hacer esto.
Utilice el
FractionallySizedBox
widget.Este widget también es muy útil cuando desea ajustar el tamaño de su hijo a una fracción del tamaño de su padre.
fuente
Para hacer que un niño complete su padre, simplemente envuélvalo en un FittedBox
fuente