Middle
Kam skirti widget valdikliai Flutter'yje?
sobes.tech AI
Atsakymas iš AI
Flutter'e widget'ų valdikliai naudojami valdyti konkretaus widget'o būseną arba elgesį iš išorės, taip pat sąveikauti su juo.
Pagrindiniai tikslai:
- Programinis valdymas: Keisti widget'o savybes (pavyzdžiui, sąrašo nuskaitymas, žymeklio valdymas teksto lauke) be tiesioginio naudotojo sąveikos.
- Informacijos gavimas: Skaityti esamą widget'o būseną (pavyzdžiui, nuskaitymo poziciją, įvestą tekstą).
- Įvykių reakcija: Atlikti veiksmus, susijusius su widget'u, kaip atsaką į įvykius kitose programos dalyse.
Populiarių valdiklių pavyzdžiai:
TextEditingController: Tekstinių laukų (TextField,TextFormField) valdymas. Leidžia gauti ir nustatyti tekstą, valdyti žymeklio ir pozicijos valdymą.final myController = TextEditingController(); // Gauti tekstą iš lauko final text = myController.text; // Nustatyti tekstą lauke myController.text = 'Naujas tekstas';ScrollController: Slinkimo valdiklių (ListView,GridView,SingleChildScrollView) valdymas. Leidžia programiškai slinkti, gauti esamą poziciją ir klausytis slinkimo įvykių.final myScrollController = ScrollController(); // Slinkti į pradžią myScrollController.animateTo( 0, duration: Duration(milliseconds: 500), curve: Curves.easeOut, ); // Gauti esamą slinkimo poziciją final position = myScrollController.position.pixels;PageController: Puslapių valdymas (PageView). Leidžia pereiti tarp puslapių, gauti esamą puslapį ir klausytis puslapio keitimo įvykių.final myPageController = PageController(); // Pereiti į kitą puslapį myPageController.nextPage( duration: Duration(milliseconds: 300), curve: Curves.easeIn, ); // Gauti esamą puslapį final currentPage = myPageController.page;
Valdikliai dažniausiai perduodami atitinkamam widget'ui per jo konstruktorių. Valdiklio gyvavimo ciklo valdymas (sukūrimas ir ištrynimas) turėtų būti atliekamas widget'e, kuris jį naudoja, dažniausiai initState metodą kur kuriama ir dispose kur ištrinama.
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(); // Svarbu atlaisvinti išteklius
super.dispose();
}
@override
Widget build(BuildContext context) {
return TextField(
controller: _textController,
// ... kiti TextField parametrai
);
}
}
Valdiklių naudojimas leidžia aiškiai atskirti valdiklio valdymo logiką nuo jo pateikimo.