Middle
¿Qué widgets en Flutter proporcionan diseño adaptable?
sobes.tech AI
Respuesta de la IA
MediaQuery- para obtener información sobre el tamaño y la orientación de la pantalla.LayoutBuilder- para construir widgets en función de las restricciones del elemento padre.OrientationBuilder- para construir widgets en función de la orientación de la pantalla.FractionallySizedBox- para crear elementos con tamaño proporcional al espacio disponible.AspectRatio- para mantener una relación de aspecto específica del elemento.ExpandedyFlexible- para distribuir espacio de manera flexible entre elementos enRowoColumn.SingleChildScrollView- para desplazar contenido si excede el área disponible.ListViewyGridView- para mostrar listas y cuadrículas con capacidad de adaptación.ResponsiveBuilder(del paqueteresponsive_framework) - para construir widgets en función de los puntos de interrupción.FittedBox- para escalar el widget hijo según el tamaño del padre.
// Ejemplo de uso de MediaQuery
class HomeScreen extends StatelessWidget {
@override
Widget build(BuildContext context) {
final Size screenSize = MediaQuery.of(context).size;
return Scaffold(
appBar: AppBar(
title: Text('Diseño adaptable'),
),
body: Center(
child: Text('Tamaño de pantalla: ${screenSize.width.toStringAsFixed(1)}x${screenSize.height.toStringAsFixed(1)}'),
),
);
}
}
// Ejemplo de uso de LayoutBuilder
class AdaptiveContainer extends StatelessWidget {
@override
Widget build(BuildContext context) {
return LayoutBuilder(
builder: (BuildContext context, BoxConstraints constraints) {
if (constraints.maxWidth > 600) {
// Pantalla ancha
return Container(
color: Colors.blue,
width: 300,
height: 100,
child: Center(child: Text('Ancho')),
);
} else {
// Pantalla estrecha
return Container(
color: Colors.red,
width: 100,
height: 50,
child: Center(child: Text('Estrecho')),
);
}
},
);
}
}
// Ejemplo de uso de Expanded
class FlexibleLayout extends StatelessWidget {
@override
Widget build(BuildContext context) {
return Row(
children: <Widget>[
Container(
color: Colors.yellow,
width: 50,
height: 50,
),
Expanded( // Tomará el espacio restante
child: Container(
color: Colors.green,
height: 50,
),
),
],
);
}
}