Middle
Milleks kasutatakse Flutteris vidjet-kontrollereid?
sobes.tech AI
Vastus AI-lt
Flutteris kasutatakse vidžetivõtmeid konkreetse vidžeti oleku või käitumise välise juhtimise ja sellega suhtlemise jaoks.
Peamised eesmärgid:
- Programmeeritud juhtimine: Vidžeti omaduste muutmine (näiteks loendi kerimine, kursoriga juhtimine tekstiväljal) ilma otsese kasutajaliidese sekkumiseta.
- Informatsiooni kogumine: Praeguse vidžeti oleku lugemine (näiteks kerimise asukoht, sisestatud tekst).
- Sündmuste reageerimine: Vidžetiga seotud tegevuste teostamine vastusena teiste rakenduse osade sündmustele.
Populaarsed kontrollijad:
TextEditingController: Tekstiväljade (TextField,TextFormField) juhtimine. Annab võimaluse saada ja seada teksti, juhtida valikut ja kursorit.final myController = TextEditingController(); // Teksti saamine väljast final text = myController.text; // Teksti seadmine väljast myController.text = 'Uus tekst';ScrollController: Keritavate vidžettide (ListView,GridView,SingleChildScrollView) juhtimine. Annab võimaluse programmeerida kerimist, saada praegune asukoht ja kuulata kerimise sündmusi.final myScrollController = ScrollController(); // Kerida algusesse myScrollController.animateTo( 0, duration: Duration(milliseconds: 500), curve: Curves.easeOut, ); // Saada praegune kerimise asukoht final position = myScrollController.position.pixels;PageController: Lehekülgede juhtimine (PageView). Annab võimaluse vahetada lehekülgi, saada praegune lehekülg ja kuulata lehekülje muutmise sündmusi.final myPageController = PageController(); // Liigu järgmisele leheküljele myPageController.nextPage( duration: Duration(milliseconds: 300), curve: Curves.easeIn, ); // Saada praegune lehekülg final currentPage = myPageController.page;
Kontrollerid antakse tavaliselt vastavale vidžetile selle konstruktoriga. Kontrolleri elutsükli juhtimine (loomine ja kustutamine) peaks toimuma vidžetis, mis seda kasutab, sageli initState meetodis selle loomise ja dispose meetodis selle vabastamise jaoks.
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(); // Oluline on ressursid vabastada
super.dispose();
}
@override
Widget build(BuildContext context) {
return TextField(
controller: _textController,
// ... muud omadused
);
}
}
Kontrollerite kasutamine võimaldab selgelt eristada vidžeti juhtimise loogikat selle esitlusest.