Dimensionar elementos al porcentaje del ancho/alto de la pantalla
¿Existe una forma sencilla (que no sea 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 CardView para que sea el 65% del ancho de la pantalla?
No se puede hacer dentro del build
método (obviamente), por lo que debería posponerse hasta después de la compilación. ¿Existe un lugar preferido para colocar una lógica como esta?
Esta es una respuesta complementaria que muestra la implementación de algunas de las soluciones mencionadas.
Caja de tamaño fraccional
Si tiene un único widget, puede utilizarlo FractionallySizedBox
para especificar un porcentaje del espacio disponible para llenar. Aquí el verde Container
está configurado para llenar el 70% del ancho disponible y el 30% de la altura disponible.
Widget myWidget() {
return FractionallySizedBox(
widthFactor: 0.7,
heightFactor: 0.3,
child: Container(
color: Colors.green,
),
);
}
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 utilizar la flex
propiedad con varios widgets para darles pesos. Aquí el verde Container
ocupa el 70% del ancho y el amarillo el Container
30% del ancho.
Si desea hacerlo verticalmente, simplemente reemplácelo Row
con Column
.
Widget myWidget() {
return Row(
children: <Widget>[
Expanded(
flex: 7,
child: Container(
color: Colors.green,
),
),
Expanded(
flex: 3,
child: Container(
color: Colors.yellow,
),
),
],
);
}
código suplementario
Aquí está el main.dart
código para su referencia.
import 'package:flutter/material.dart';
void main() => runApp(MyApp());
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
home: Scaffold(
appBar: AppBar(
title: Text("FractionallySizedBox"),
),
body: myWidget(),
),
);
}
}
// replace with example code above
Widget myWidget() {
return ...
}
FractionallySizedBox
También puede ser útil. También puede leer el ancho de la pantalla directamente MediaQuery.of(context).size
y crear un cuadro de tamaño basado en ese
MediaQuery.of(context).size.width * 0.65
si realmente desea ajustar el tamaño a una fracción de la pantalla, independientemente del diseño.