Middle
Ի՞նչ նպատակով են օգտագործվում widget-կոնտրոլները Flutter-ում։
sobes.tech AI
Պատասխան AI-ից
Flutter-ում վիդջեթի կառավարիչները օգտագործվում են կոնկրետ վիդջեթի վիճակն կամ վարքագիծը արտաքինից կառավարելու համար, ինչպես նաև դրա հետ փոխազդելու համար:
Հիմնական նպատակները՝
- Ծրագրային կառավարում: Վիդջեթի հատկությունների փոփոխություն (օրինակ՝ ցանկի սահում, մուտքագրված տեքստի կառավարում) ուղիղ օգտագործողի փոխազդեցություն չլինելով:
- Տեղեկատվության ստացում: Վիդջեթի ընթացիկ վիճակի ընթերցում (օրինակ՝ սահման ընթացիկ դիրքը, մուտքագրված տեքստը):
- Ի պատասխան իրադարձությունների: Վիդջեթի հետ կապված գործողությունների կատարմամբ՝ ի պատասխան ծրագրի այլ մասերում տեղի ունեցող իրադարձությունների:
Նախընտրելի կառավարիչների օրինակներ՝
TextEditingController: Տեքստային դաշտերի (TextField,TextFormField) կառավարում: Позволяет получать и устанавливать текст, управлять выделением и позицией курсора.final myController = TextEditingController(); // Տեքստի ստացում դաշտից final text = myController.text; // Տեքստի տեղադրում դաշտում myController.text = 'Նոր տեքստ';ScrollController: Սահվող վիդջեթների (ListView,GridView,SingleChildScrollView) կառավարում: Позволяет программно прокручивать, получать текущую позицию и слушать события прокрутки.final myScrollController = ScrollController(); // Սահում սկզբին myScrollController.animateTo( 0, duration: Duration(milliseconds: 500), curve: Curves.easeOut, ); // Հաշվարկի ընթացիկ դիրքը final position = myScrollController.position.pixels;PageController: Էջերի կառավարում (PageView): Позволяет переключаться между страницами, получать текущую страницу и слушать события изменения страницы.final myPageController = PageController(); // Փոխել հաջորդ էջ myPageController.nextPage( duration: Duration(milliseconds: 300), curve: Curves.easeIn, ); // Հաշվարկել ընթացիկ էջը final currentPage = myPageController.page;
Կառավարիչները սովորաբար փոխանցվում են համապատասխան վիդջեթին նրա կոնստրուկտորով: Կառավարիչի կյանքի ցիկլի կառավարումը (ստեղծում և հեռացում) պետք է կատարվի այն վիդջեթում, որը օգտագործում է, հաճախ initState մեթոդում ստեղծելու և dispose մեթոդում հեռացնելու համար:
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(); // Կարևոր է ռեսուրսների ազատումը
super.dispose();
}
@override
Widget build(BuildContext context) {
return TextField(
controller: _textController,
// ... այլ հատկություններ
);
}
}
Կառավարիչների օգտագործումը թույլ է տալիս բացահայտորեն բաժանել վիդջեթի կառավարման տրամաբանությունը նրա ներկայացումից։