Sobes.tech
Middle

Welche Widgets in Flutter bieten ein anpassungsfähiges Layout?

sobes.tech KI

Antwort von AI

  • MediaQuery - um zur Abfrage von Informationen über die Größe und Ausrichtung des Bildschirms.
  • LayoutBuilder - zum Erstellen von Widgets basierend auf den Einschränkungen des übergeordneten Elements.
  • OrientationBuilder - zum Erstellen von Widgets basierend auf der Ausrichtung des Bildschirms.
  • FractionallySizedBox - zum Erstellen von Elementen mit einer Größe, die proportional zum verfügbaren Raum ist.
  • AspectRatio - zum Beibehalten eines bestimmten Seitenverhältnisses des Elements.
  • Expanded und Flexible - zum flexiblen Verteilen des Raums zwischen Elementen in Row oder Column.
  • SingleChildScrollView - zum Scrollen des Inhalts, wenn dieser den verfügbaren Bereich überschreitet.
  • ListView und GridView - zum Anzeigen von Listen und Gittern mit Anpassungsfähigkeit.
  • ResponsiveBuilder (aus dem Paket responsive_framework) - zum Erstellen von Widgets basierend auf Breakpoints.
  • FittedBox - zum Skalieren des Kind-Widgets entsprechend der Größe des Elternteils.
// Beispiel für die Verwendung von MediaQuery
class HomeScreen extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    final Size screenSize = MediaQuery.of(context).size;

    return Scaffold(
      appBar: AppBar(
        title: Text('Anpassbares Design'),
      ),
      body: Center(
        child: Text('Bildschirmgröße: ${screenSize.width.toStringAsFixed(1)}x${screenSize.height.toStringAsFixed(1)}'),
      ),
    );
  }
}
// Beispiel für die Verwendung von LayoutBuilder
class AdaptiveContainer extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return LayoutBuilder(
      builder: (BuildContext context, BoxConstraints constraints) {
        if (constraints.maxWidth > 600) {
          // Breiter Bildschirm
          return Container(
            color: Colors.blue,
            width: 300,
            height: 100,
            child: Center(child: Text('Breit')),
          );
        } else {
          // Schmaler Bildschirm
          return Container(
            color: Colors.red,
            width: 100,
            height: 50,
            child: Center(child: Text('Schmal')),
          );
        }
      },
    );
  }
}
// Beispiel für die Verwendung von Expanded
class FlexibleLayout extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return Row(
      children: <Widget>[
        Container(
          color: Colors.yellow,
          width: 50,
          height: 50,
        ),
        Expanded( // Nimmt den verbleibenden Raum ein
          child: Container(
            color: Colors.green,
            height: 50,
          ),
        ),
      ],
    );
  }
}