Sobes.tech
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.
  • Expanded y Flexible - para distribuir espacio de manera flexible entre elementos en Row o Column.
  • SingleChildScrollView - para desplazar contenido si excede el área disponible.
  • ListView y GridView - para mostrar listas y cuadrículas con capacidad de adaptación.
  • ResponsiveBuilder (del paquete responsive_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,
          ),
        ),
      ],
    );
  }
}