Middle
Na čo sa v Flutteri používajú widget-ovládače?
sobes.tech AI
Odpoveď od AI
V Flutteri sa používajú ovládače widgetov na správu stavu alebo správania konkrétneho widgetu zvonku, ako aj na interakciu s ním.
Hlavné ciele použitia:
- Programové riadenie: Zmena vlastností widgetu (napríklad posúvanie zoznamu, riadenie kurzora v textovom poli) bez priamej interakcie používateľa.
- Získavanie informácií: Čítanie aktuálneho stavu widgetu (napríklad aktuálna pozícia posunu, zadaný text).
- Reakcia na udalosti: Vykonávanie akcií súvisiacich s widgetom ako reakcia na udalosti v iných častiach aplikácie.
Príklady populárnych ovládačov:
TextEditingController: Riadenie textových polí (TextField,TextFormField). Umožňuje získať a nastaviť text, spravovať výber a pozíciu kurzora.final myController = TextEditingController(); // Získať text z poľa final text = myController.text; // Nastaviť text v poli myController.text = 'Nový text';ScrollController: Riadenie posúvateľných widgetov (ListView,GridView,SingleChildScrollView). Umožňuje programovo posúvať, získať aktuálnu pozíciu a sledovať udalosti posúvania.final myScrollController = ScrollController(); // Posunúť na začiatok myScrollController.animateTo( 0, duration: Duration(milliseconds: 500), curve: Curves.easeOut, ); // Získať aktuálnu pozíciu posunu final position = myScrollController.position.pixels;PageController: Riadenie stránok vo widgetoch (PageView). Umožňuje prepínať medzi stránkami, získať aktuálnu stránku a sledovať udalosti zmeny stránky.final myPageController = PageController(); // Prejsť na ďalšiu stránku myPageController.nextPage( duration: Duration(milliseconds: 300), curve: Curves.easeIn, ); // Získať aktuálnu stránku final currentPage = myPageController.page;
Ovládače sa zvyčajne odovzdávajú príslušnému widgetu cez jeho konštruktor. Riadenie životného cyklu ovládača (vytvorenie a odstránenie) by sa malo vykonávať vo widgete, ktorý ho používa, často v metóde initState na vytvorenie a dispose na odstránenie.
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(); // Je dôležité uvoľniť zdroje
super.dispose();
}
@override
Widget build(BuildContext context) {
return TextField(
controller: _textController,
// ... ďalšie vlastnosti TextField
);
}
}
Použitie ovládačov umožňuje jasne oddeliť logiku riadenia widgetu od jeho prezentácie.