Sobes.tech
Middle

Waarvoor worden widget-controllers in Flutter gebruikt?

sobes.tech AI

Antwoord van AI

Widgets-controllers in Flutter worden gebruikt om de toestand of het gedrag van een specifieke widget van buitenaf te beheren, evenals om ermee te communiceren.

Belangrijkste gebruiksdoelen:

  • Programmatig beheer: Het wijzigen van eigenschappen van de widget (bijvoorbeeld lijst scrollen, cursorcontrole in een tekstveld) zonder directe interactie van de gebruiker.
  • Informatie verkrijgen: Het lezen van de huidige status van de widget (bijvoorbeeld de huidige scrollpositie, ingevoerde tekst).
  • Reageren op gebeurtenissen: Acties uitvoeren die gerelateerd zijn aan de widget als reactie op gebeurtenissen in andere delen van de applicatie.

Voorbeelden van populaire controllers:

  • TextEditingController: Beheer van tekstvelden (TextField, TextFormField). Hiermee kan tekst worden opgehaald en ingesteld, selectie en cursorpositie worden beheerd.
    final myController = TextEditingController();
    
    // Tekst uit het veld halen
    final text = myController.text;
    
    // Tekst instellen in het veld
    myController.text = 'Nieuwe tekst';
    
  • ScrollController: Beheer van scrollbare widgets (ListView, GridView, SingleChildScrollView). Hiermee kan programatisch worden gescrold, de huidige scrollpositie worden verkregen en scrollgebeurtenissen worden geluisterd.
    final myScrollController = ScrollController();
    
    // Naar begin scrollen
    myScrollController.animateTo(
      0,
      duration: Duration(milliseconds: 500),
      curve: Curves.easeOut,
    );
    
    // Huidige scrollpositie verkrijgen
    final position = myScrollController.position.pixels;
    
  • PageController: Beheer van paginawidgets (PageView). Hiermee kan worden gewisseld tussen pagina's, de huidige pagina worden verkregen en pagina-verschilgebeurtenissen worden geluisterd.
    final myPageController = PageController();
    
    // Naar volgende pagina gaan
    myPageController.nextPage(
      duration: Duration(milliseconds: 300),
      curve: Curves.easeIn,
    );
    
    // Huidige pagina verkrijgen
    final currentPage = myPageController.page;
    

Controllers worden meestal via de constructor aan het bijbehorende widget doorgegeven. Het beheer van de levenscyclus van de controller (aanmaken en verwijderen) moet plaatsvinden in de widget die deze gebruikt, vaak in de initState-methode voor het aanmaken en dispose voor het verwijderen.

class MyWidget extends StatefulWidget {
  @override
  _MyWidgetState createState() => _MyWidgetState();
}

class _MyWidgetState extends State<MyWidget> {
  late final TextEditingController _textController;

  @override
  void initState() {
    super.initState();
    _textController = TextEditingController();
  }

  @override
  void dispose() {
    _textController.dispose(); // Belangrijk om bronnen vrij te maken
    super.dispose();
  }

  @override
  Widget build(BuildContext context) {
    return TextField(
      controller: _textController,
      // ... andere eigenschappen van TextField
    );
  }
}

Het gebruik van controllers maakt het mogelijk om de logica van het beheer van de widget duidelijk te scheiden van de presentatie ervan.