Sobes.tech
Middle

Na čo sa v Flutteri používajú widget-ovládače?

sobes.tech AI

Odpoveď od AI

V Flutteri sa používajú ovládače widgetov na správu stavu alebo správania konkrétneho widgetu zvonku, ako aj na interakciu s ním.

Hlavné ciele použitia:

  • Programové riadenie: Zmena vlastností widgetu (napríklad posúvanie zoznamu, riadenie kurzora v textovom poli) bez priamej interakcie používateľa.
  • Získavanie informácií: Čítanie aktuálneho stavu widgetu (napríklad aktuálna pozícia posunu, zadaný text).
  • Reakcia na udalosti: Vykonávanie akcií súvisiacich s widgetom ako reakcia na udalosti v iných častiach aplikácie.

Príklady populárnych ovládačov:

  • TextEditingController: Riadenie textových polí (TextField, TextFormField). Umožňuje získať a nastaviť text, spravovať výber a pozíciu kurzora.
    final myController = TextEditingController();
    
    // Získať text z poľa
    final text = myController.text;
    
    // Nastaviť text v poli
    myController.text = 'Nový text';
    
  • ScrollController: Riadenie posúvateľných widgetov (ListView, GridView, SingleChildScrollView). Umožňuje programovo posúvať, získať aktuálnu pozíciu a sledovať udalosti posúvania.
    final myScrollController = ScrollController();
    
    // Posunúť na začiatok
    myScrollController.animateTo(
      0,
      duration: Duration(milliseconds: 500),
      curve: Curves.easeOut,
    );
    
    // Získať aktuálnu pozíciu posunu
    final position = myScrollController.position.pixels;
    
  • PageController: Riadenie stránok vo widgetoch (PageView). Umožňuje prepínať medzi stránkami, získať aktuálnu stránku a sledovať udalosti zmeny stránky.
    final myPageController = PageController();
    
    // Prejsť na ďalšiu stránku
    myPageController.nextPage(
      duration: Duration(milliseconds: 300),
      curve: Curves.easeIn,
    );
    
    // Získať aktuálnu stránku
    final currentPage = myPageController.page;
    

Ovládače sa zvyčajne odovzdávajú príslušnému widgetu cez jeho konštruktor. Riadenie životného cyklu ovládača (vytvorenie a odstránenie) by sa malo vykonávať vo widgete, ktorý ho používa, často v metóde initState na vytvorenie a dispose na odstránenie.

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(); // Je dôležité uvoľniť zdroje
    super.dispose();
  }

  @override
  Widget build(BuildContext context) {
    return TextField(
      controller: _textController,
      // ... ďalšie vlastnosti TextField
    );
  }
}

Použitie ovládačov umožňuje jasne oddeliť logiku riadenia widgetu od jeho prezentácie.