Middle
Flutter'da vidjet-controllerslar nima uchun ishlatiladi?
sobes.tech AI
AIdan javob
Flutter'da vidjet kontrolörleri, ma'lum bir vidjetning holatini yoki xulqini tashqaridan boshqarish uchun, shuningdek, unga o'zaro ta'sir qilish uchun ishlatiladi.
Asosiy foydalanish maqsadlari:
- Dasturiy boshqarish: Vidjetning xususiyatlarini o'zgartirish (masalan, ro'yxatni skroll qilish, matn maydonidagi kursorni boshqarish) to'g'ridan-to'g'ri foydalanuvchi bilan aloqasiz.
- Ma'lumot olish: Vidjetning joriy holatini o'qish (masalan, hozirgi skroll pozitsiyasi, kiritilgan matn).
- Voqealarga javob berish: Vidjet bilan bog'liq harakatlarni boshqa joylardagi voqealarga javoban bajarish.
Mashhur kontrolörlar misollari:
TextEditingController: Matn maydonlarini boshqarish (TextField,TextFormField). Matnni olish va o'rnatish, tanlash va kursor pozitsiyasini boshqarish imkonini beradi.final myController = TextEditingController(); // Maydondan matnni olish final text = myController.text; // Maydonda matnni o'rnatish myController.text = 'Yangi matn';ScrollController: Skroll qilinadigan vidjetlarni boshqarish (ListView,GridView,SingleChildScrollView). Dasturiy tarzda skroll qilish, hozirgi skroll pozitsiyasini olish va skroll voqealarini tinglash.final myScrollController = ScrollController(); // Boshlanishga skroll qilish myScrollController.animateTo( 0, duration: Duration(milliseconds: 500), curve: Curves.easeOut, ); // Hozirgi skroll pozitsiyasini olish final position = myScrollController.position.pixels;PageController: Sahifa vidjetlarini boshqarish (PageView). Sahifalar orasida o'tish, hozirgi sahifani olish va sahifa o'zgarishini tinglash.final myPageController = PageController(); // Keyingi sahifaga o'tish myPageController.nextPage( duration: Duration(milliseconds: 300), curve: Curves.easeIn, ); // Hozirgi sahifani olish final currentPage = myPageController.page;
Kontrolörlar odatda ularni ishlatadigan widgetning konstruktoriga uzatiladi. Kontrolörning hayot aylanishini boshqarish (yaratish va o'chirish) uni ishlatadigan widgetda bo'lishi kerak, ko'pincha initState metodida yaratiladi va dispose metodida o'chiriladi.
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(); // Resurslarni bo'shatish muhim
super.dispose();
}
@override
Widget build(BuildContext context) {
return TextField(
controller: _textController,
// ... boshqa xususiyatlar
);
}
}
Kontrolörlardan foydalanish vidjetning boshqaruv mantiqini uning taqdimotidan ajratishga imkon beradi.