Sobes.tech
Middle

Welke widgets in Flutter bieden een responsief ontwerp?

sobes.tech AI

Antwoord van AI

  • MediaQuery - om informatie te verkrijgen over de grootte en oriëntatie van het scherm.
  • LayoutBuilder - voor het bouwen van widgets op basis van de beperkingen van het ouder-element.
  • OrientationBuilder - voor het bouwen van widgets op basis van de schermoriëntatie.
  • FractionallySizedBox - voor het maken van elementen met een grootte die proportioneel is aan de beschikbare ruimte.
  • AspectRatio - voor het behouden van een bepaalde beeldverhouding van het element.
  • Expanded en Flexible - voor het flexibel verdelen van ruimte tussen elementen in Row of Column.
  • SingleChildScrollView - voor het scrollen van inhoud die de beschikbare ruimte overschrijdt.
  • ListView en GridView - voor het weergeven van lijsten en rasterweergaven met aanpassingsvermogen.
  • ResponsiveBuilder (uit het responsive_framework pakket) - voor het bouwen van widgets op basis van breekpunten.
  • FittedBox - voor het schalen van het kindwidget volgens de grootte van de ouder.
// Voorbeeld van gebruik van MediaQuery
class HomeScreen extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    final Size screenSize = MediaQuery.of(context).size;

    return Scaffold(
      appBar: AppBar(
        title: Text('Aanpasbaar ontwerp'),
      ),
      body: Center(
        child: Text('Schermgrootte: ${screenSize.width.toStringAsFixed(1)}x${screenSize.height.toStringAsFixed(1)}'),
      ),
    );
  }
}
// Voorbeeld van gebruik van LayoutBuilder
class AdaptiveContainer extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return LayoutBuilder(
      builder: (BuildContext context, BoxConstraints constraints) {
        if (constraints.maxWidth > 600) {
          // Brede scherm
          return Container(
            color: Colors.blue,
            width: 300,
            height: 100,
            child: Center(child: Text('Breed')),
          );
        } else {
          // Smalle scherm
          return Container(
            color: Colors.red,
            width: 100,
            height: 50,
            child: Center(child: Text('Smal')),
          );
        }
      },
    );
  }
}
// Voorbeeld van gebruik van Expanded
class FlexibleLayout extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return Row(
      children: <Widget>[
        Container(
          color: Colors.yellow,
          width: 50,
          height: 50,
        ),
        Expanded( // neemt de resterende ruimte in
          child: Container(
            color: Colors.green,
            height: 50,
          ),
        ),
      ],
    );
  }
}