Sobes.tech
Junior

Welke soorten widgets zijn er in Flutter?

sobes.tech AI

Antwoord van AI

In Flutter worden widgets onderverdeeld in twee hoofdcategorieën:

  • StatelessWidget: Widgets waarvan de toestand niet verandert na de initiële samenstelling. Ze beschrijven een deel van de gebruikersinterface dat niet afhankelijk is van runtimegegevens.
  • StatefulWidget: Widgets met een wijzigbare toestand. Ze hebben een gekoppeld State-object dat wijzigbare gegevens bevat en een mechanisme biedt om het widget opnieuw te bouwen bij een wijziging van de toestand.

Daarnaast kunnen widgets worden gecategoriseerd op basis van hun doel:

  • Lay-out widgets: Beheren de positionering van andere widgets op het scherm (bijvoorbeeld Row, Column, Stack).
  • Material Components / Cupertino widgets: Bieden kant-en-klare UI-elementen die voldoen aan Material Design (Android) of Cupertino (iOS) richtlijnen (bijvoorbeeld AppBar, Button, TextField).
  • Invoer widgets: Stellen de gebruiker in staat om interactie te hebben met de app (bijvoorbeeld TextField, Checkbox, Slider).
  • Interactieve widgets: Reageren op gebruikersgebaren (bijvoorbeeld GestureDetector, InkWell).
  • Schilder- & Effect-widgets: Toepassen grafische effecten (bijvoorbeeld Opacity, ClipRRect).
  • Scroll-widgets: Zorgt voor scrollen van inhoud (bijvoorbeeld ListView, GridView).

Widgets kunnen worden gemaakt op basis van:

  • Primitief: Basisbouwstenen (bijvoorbeeld Container, Text, Icon).
  • Samenstellend: Gemaakt uit andere widgets.
// Voorbeeld van StatefulWidget
class CounterWidget extends StatefulWidget {
  @override
  _CounterWidgetState createState() => _CounterWidgetState();
}

class _CounterWidgetState extends State<CounterWidget> {
  int _counter = 0;

  void _incrementCounter() {
    setState(() {
      // Verander de toestand en herteken
      _counter++;
    });
  }

  @override
  Widget build(BuildContext context) {
    return Column(
      mainAxisAlignment: MainAxisAlignment.center,
      children: <Widget>[
        Text('Teller:'),
        Text(
          '$_counter',
          style: Theme.of(context).textTheme.headline4,
        ),
        FloatingActionButton(
          onPressed: _incrementCounter,
          tooltip: 'Verhoog',
          child: Icon(Icons.add),
        ),
      ],
    );
  }
}
// Voorbeeld van StatelessWidget
class TitleWidget extends StatelessWidget {
  final String title;

  TitleWidget({required this.title});

  @override
  Widget build(BuildContext context) {
    return Text(
      title,
      style: TextStyle(fontSize: 24),
    );
  }
}