Sobes.tech
Middle

Na co se v Flutteru používají widget-řadiče?

sobes.tech AI

Odpověď od AI

V Flutteru se widgetové ovladače používají k řízení stavu nebo chování konkrétního widgetu zvenčí, stejně jako k interakci s ním.

Hlavní cíle použití:

  • Programové řízení: Změna vlastností widgetu (například posun seznamu, řízení kurzoru v textovém poli) bez přímé interakce uživatele.
  • Získávání informací: Čtení aktuálního stavu widgetu (například aktuální pozice posuvu, zadaný text).
  • Reakce na události: Provádění akcí souvisejících s widgetem jako reakce na události v jiných částech aplikace.

Příklady populárních ovladačů:

  • TextEditingController: Řízení textových polí (TextField, TextFormField). Umožňuje získat a nastavit text, spravovat výběr a pozici kurzoru.
    final myController = TextEditingController();
    
    // Získat text z pole
    final text = myController.text;
    
    // Nastavit text v poli
    myController.text = 'Nový text';
    
  • ScrollController: Řízení posuvných widgetů (ListView, GridView, SingleChildScrollView). Umožňuje programově posouvat, získat aktuální pozici posuvu a poslouchat události posuvu.
    final myScrollController = ScrollController();
    
    // Posunout na začátek
    myScrollController.animateTo(
      0,
      duration: Duration(milliseconds: 500),
      curve: Curves.easeOut,
    );
    
    // Získat aktuální pozici posuvu
    final position = myScrollController.position.pixels;
    
  • PageController: Řízení widgetů stránek (PageView). Umožňuje přepínat mezi stránkami, získat aktuální stránku a poslouchat události změny stránky.
    final myPageController = PageController();
    
    // Přepnout na další stránku
    myPageController.nextPage(
      duration: Duration(milliseconds: 300),
      curve: Curves.easeIn,
    );
    
    // Získat aktuální stránku
    final currentPage = myPageController.page;
    

Ovladače se obvykle předávají přímo do příslušného widgetu přes jeho konstruktor. Řízení životního cyklu ovladače (vytvoření a odstranění) by mělo probíhat ve widgetu, který ho používá, často v metodě initState pro vytvoření a dispose pro odstranění.

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é uvolnit zdroje
    super.dispose();
  }

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

Použití ovladačů umožňuje explicitně oddělit logiku řízení widgetu od jeho prezentace.