¿Existe una forma simple (no LayoutBuilder) de dimensionar un elemento en relación con el tamaño de la pantalla (ancho / alto)? Por ejemplo: ¿cómo configuro el ancho de un CardView para que sea el 65% del ancho de la pantalla?
No se puede hacer dentro del build
método (obviamente), por lo que tendría que diferirse hasta la construcción posterior. ¿Hay un lugar preferido para poner lógica como esta?
Respuestas:
FractionallySizedBox
También puede ser útil. También puede leer el ancho de la pantalla directamenteMediaQuery.of(context).size
y crear un cuadro de tamaño basado en esosi realmente desea dimensionar como una fracción de la pantalla, independientemente de cuál sea el diseño.
fuente
Esta es una respuesta complementaria que muestra la implementación de un par de las soluciones mencionadas.
FractionallySizedBox
Si tiene un único widget, puede usar un
FractionallySizedBox
widget para especificar un porcentaje del espacio disponible para llenar. Aquí el verdeContainer
está configurado para llenar el 70% del ancho disponible y el 30% de la altura disponible.Expandido
El
Expanded
widget permite que un widget llene el espacio disponible, horizontalmente si está en una fila, o verticalmente si está en una columna. Puede usar laflex
propiedad con múltiples widgets para darles peso. Aquí el verdeContainer
toma el 70% del ancho y el amarilloContainer
toma el 30% del ancho.Si desea hacerlo verticalmente, simplemente reemplácelo
Row
conColumn
.Código suplementario
Aquí está el
main.dart
código para su referencia.fuente
Dialog
estilo :)Esto podría ser un poco más claro:
Espero que esto haya resuelto tu problema.
fuente
Puede crear una columna / fila con elementos secundarios flexibles o expandidos que tengan valores flexibles que se sumen a los porcentajes que desee.
También puede encontrar útil el widget AspectRatio .
fuente
fuente
Hay muchas maneras de hacer esto.
1. Uso de MediaQuery: devuelve la pantalla completa de su dispositivo, incluida la barra de aplicaciones, la barra de herramientas
2. Usando expandido: puede establecer el ancho / alto en relación
3. A otros les gusta Flexible y AspectRatio y FractionallySizedBox
fuente
puede usar MediaQuery con el contexto actual de su widget y obtener un ancho o alto como este
double width = MediaQuery.of(context).size.width double height = MediaQuery.of(context).size.height
después de eso, puede multiplicarlo con el porcentaje que deseefuente
Primero obtenga el tamaño de la pantalla.
Después de esto, puede obtener
width
y multiplicarlo0.5
para obtener el 50% del ancho de la pantalla.Pero el problema generalmente viene
height
, por defecto cuando usamosLa altura que obtenemos es la altura global que incluye
StatusBar
+notch
+AppBar
altura. Entonces, para obtener la altura izquierda del dispositivo, necesitamos restar lapadding
altura (StatusBar
+notch
) y laAppBar
altura de la altura total. Así es como lo hacemos.Ahora podemos usar el siguiente para obtener el 50% de nuestra pantalla en altura.
fuente
Si está utilizando GridView, puede usar algo como la solución de Ian Hickson.
fuente
Use el widget LayoutBuilder que le dará restricciones que puede usar para obtener la altura que excluye la barra de aplicaciones y el relleno. Luego use un SizedBox y proporcione el ancho y la altura usando las restricciones del LayoutBuilder
fuente