Middle
Na co se v Flutteru používají widget-řadiče?
sobes.tech AI
Odpověď od AI
V Flutteru se widgetové ovladače používají k řízení stavu nebo chování konkrétního widgetu zvenčí, stejně jako k interakci s ním.
Hlavní cíle použití:
- Programové řízení: Změna vlastností widgetu (například posun seznamu, řízení kurzoru v textovém poli) bez přímé interakce uživatele.
- Získávání informací: Čtení aktuálního stavu widgetu (například aktuální pozice posuvu, zadaný text).
- Reakce na události: Provádění akcí souvisejících s widgetem jako reakce na události v jiných částech aplikace.
Příklady populárních ovladačů:
TextEditingController: Řízení textových polí (TextField,TextFormField). Umožňuje získat a nastavit text, spravovat výběr a pozici kurzoru.final myController = TextEditingController(); // Získat text z pole final text = myController.text; // Nastavit text v poli myController.text = 'Nový text';ScrollController: Řízení posuvných widgetů (ListView,GridView,SingleChildScrollView). Umožňuje programově posouvat, získat aktuální pozici posuvu a poslouchat události posuvu.final myScrollController = ScrollController(); // Posunout na začátek myScrollController.animateTo( 0, duration: Duration(milliseconds: 500), curve: Curves.easeOut, ); // Získat aktuální pozici posuvu final position = myScrollController.position.pixels;PageController: Řízení widgetů stránek (PageView). Umožňuje přepínat mezi stránkami, získat aktuální stránku a poslouchat události změny stránky.final myPageController = PageController(); // Přepnout na další stránku myPageController.nextPage( duration: Duration(milliseconds: 300), curve: Curves.easeIn, ); // Získat aktuální stránku final currentPage = myPageController.page;
Ovladače se obvykle předávají přímo do příslušného widgetu přes jeho konstruktor. Řízení životního cyklu ovladače (vytvoření a odstranění) by mělo probíhat ve widgetu, který ho používá, často v metodě initState pro vytvoření a dispose pro odstranění.
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é uvolnit zdroje
super.dispose();
}
@override
Widget build(BuildContext context) {
return TextField(
controller: _textController,
// ... další vlastnosti TextField
);
}
}
Použití ovladačů umožňuje explicitně oddělit logiku řízení widgetu od jeho prezentace.