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.