Sobes.tech
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.