Middle
Kam tiek izmantoti widget kontrolieri Flutter?
sobes.tech AI
Atbilde no AI
Flutter'da viedtjuetu kontrolieri tiek izmantoti, lai ārēji pārvaldītu konkrēta viedtjueta stāvokli vai uzvedību, kā arī ar to sadarboties.
Galvenie mērķi:
- Programmatūra vadība: Viedtjueta īpašību maiņa (piemēram, saraksta ritināšana, kursora vadība teksta laukā) bez tiešas lietotāja mijiedarbības.
- Informācijas iegūšana: Lasīt pašreizējo viedtjueta stāvokli (piemēram, pašreizējo ritināšanas pozīciju, ievadīto tekstu).
- Notikumu reakcija: Veikt darbības, kas saistītas ar viedtjuetu, kā atbildi uz citu daļu notikumiem lietojumprogrammā.
Populāru kontrolieru piemēri:
TextEditingController: Teksta lauku (TextField,TextFormField) vadība. Ļauj iegūt un iestatīt tekstu, vadīt izcelšanu un kursora pozīciju.final myController = TextEditingController(); // Iegūt tekstu no lauka final text = myController.text; // Iestatīt tekstu lauka myController.text = 'Jauns teksts';ScrollController: Ritināmo viedtjuetu vadība (ListView,GridView,SingleChildScrollView). Ļauj programmatiski ritināt, iegūt pašreizējo pozīciju un klausīties ritināšanas notikumus.final myScrollController = ScrollController(); // Ritināt uz sākumu myScrollController.animateTo( 0, duration: Duration(milliseconds: 500), curve: Curves.easeOut, ); // Iegūt pašreizējo ritināšanas pozīciju final position = myScrollController.position.pixels;PageController: Lapu vadība (PageView). Ļauj pārslēgties starp lapām, iegūt pašreizējo lapu un klausīties lapas maiņas notikumus.final myPageController = PageController(); // Pāriet uz nākamo lapu myPageController.nextPage( duration: Duration(milliseconds: 300), curve: Curves.easeIn, ); // Iegūt pašreizējo lapu final currentPage = myPageController.page;
Kontrolieri parasti tiek nodoti attiecīgajam widget'am caur tā konstruktoru. Kontroliera dzīves cikla vadība (izveide un iznīcināšana) jāveic widget'ā, kas to izmanto, bieži initState metodē izveidojot un dispose metodē iznīcinot.
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(); // Ir svarīgi atbrīvot resursus
super.dispose();
}
@override
Widget build(BuildContext context) {
return TextField(
controller: _textController,
// ... citas īpašības
);
}
}
Viedtjuetu kontrolieru izmantošana ļauj skaidri atdalīt vadības loģiku no tā attēlojuma.