Middle
Flutterдеги widget-дар контроллердер эмне үчүн колдонулат?
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,
// ... башка касиеттер
);
}
}
Контроллердерди колдонуу виджетті башкаруу логикасын анын көрсөтүүсүнөн так ажыратууга мүмкүндүк берет.