Sobes.tech
Middle

Quali widget in Flutter garantiscono un layout adattivo?

sobes.tech AI

Risposta dell'AI

  • MediaQuery - per ottenere informazioni sulle dimensioni e sull'orientamento dello schermo.
  • LayoutBuilder - per costruire widget in base ai vincoli dell'elemento genitore.
  • OrientationBuilder - per costruire widget in base all'orientamento dello schermo.
  • FractionallySizedBox - per creare elementi con dimensioni proporzionali allo spazio disponibile.
  • AspectRatio - per mantenere un rapporto di aspetto specifico dell'elemento.
  • Expanded e Flexible - per distribuire lo spazio in modo flessibile tra gli elementi in Row o Column.
  • SingleChildScrollView - per scorrere il contenuto se supera l'area disponibile.
  • ListView e GridView - per visualizzare liste e griglie con capacità di adattamento.
  • ResponsiveBuilder (dal pacchetto responsive_framework) - per costruire widget in base ai punti di interruzione.
  • FittedBox - per scalare il widget figlio in base alle dimensioni del genitore.
// Esempio di utilizzo di MediaQuery
class HomeScreen extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    final Size screenSize = MediaQuery.of(context).size;

    return Scaffold(
      appBar: AppBar(
        title: Text('Design reattivo'),
      ),
      body: Center(
        child: Text('Dimensione dello schermo: ${screenSize.width.toStringAsFixed(1)}x${screenSize.height.toStringAsFixed(1)}'),
      ),
    );
  }
}
// Esempio di utilizzo di LayoutBuilder
class AdaptiveContainer extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return LayoutBuilder(
      builder: (BuildContext context, BoxConstraints constraints) {
        if (constraints.maxWidth > 600) {
          // Schermo largo
          return Container(
            color: Colors.blue,
            width: 300,
            height: 100,
            child: Center(child: Text('Largo')),
          );
        } else {
          // Schermo stretto
          return Container(
            color: Colors.red,
            width: 100,
            height: 50,
            child: Center(child: Text('Stretto')),
          );
        }
      },
    );
  }
}
// Esempio di utilizzo di Expanded
class FlexibleLayout extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return Row(
      children: <Widget>[
        Container(
          color: Colors.yellow,
          width: 50,
          height: 50,
        ),
        Expanded( // Occuperà lo spazio rimanente
          child: Container(
            color: Colors.green,
            height: 50,
          ),
        ),
      ],
    );
  }
}