Sobes.tech
Middle

Pentru ce sunt folosiți controlerii de widget-uri în Flutter?

sobes.tech AI

Răspuns de la AI

Controlerele de widget-uri în Flutter sunt utilizate pentru a gestiona starea sau comportamentul unui widget specific din exterior, precum și pentru a interacționa cu acesta.

Obiectivele principale de utilizare:

  • Gestionare programatică: Modificarea proprietăților widget-ului (de exemplu, derularea listei, controlul cursorului într-un câmp de text) fără interacțiune directă a utilizatorului.
  • Obținerea de informații: Citirea stării curente a widget-ului (de exemplu, poziția de derulare actuală, textul introdus).
  • Reacție la evenimente: Executarea de acțiuni legate de widget ca răspuns la evenimente în alte părți ale aplicației.

Exemple de controlere populare:

  • TextEditingController: Gestionarea câmpurilor de text (TextField, TextFormField). Permite obținerea și setarea textului, gestionarea selecției și a poziției cursorului.
    final myController = TextEditingController();
    
    // Obține textul din câmp
    final text = myController.text;
    
    // Setează textul în câmp
    myController.text = 'Text nou';
    
  • ScrollController: Gestionarea widget-urilor derulabile (ListView, GridView, SingleChildScrollView). Permite derularea programatică, obținerea poziției curente de derulare și ascultarea evenimentelor de derulare.
    final myScrollController = ScrollController();
    
    // Derulează la început
    myScrollController.animateTo(
      0,
      duration: Duration(milliseconds: 500),
      curve: Curves.easeOut,
    );
    
    // Obține poziția curentă de derulare
    final position = myScrollController.position.pixels;
    
  • PageController: Gestionarea widget-urilor de pagini (PageView). Permite comutarea între pagini, obținerea paginii curente și ascultarea evenimentelor de schimbare a paginii.
    final myPageController = PageController();
    
    // Trece la pagina următoare
    myPageController.nextPage(
      duration: Duration(milliseconds: 300),
      curve: Curves.easeIn,
    );
    
    // Obține pagina curentă
    final currentPage = myPageController.page;
    

Controlerele sunt de obicei transmise widget-ului corespunzător prin constructorul său. Gestionarea ciclului de viață al controlerului (creare și eliminare) trebuie să aibă loc în widget-ul care îl utilizează, adesea în metoda initState pentru crearea și în dispose pentru eliminare.

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(); // Este important să eliberezi resursele
    super.dispose();
  }

  @override
  Widget build(BuildContext context) {
    return TextField(
      controller: _textController,
      // ... alte proprietăți ale TextField
    );
  }
}

Utilizarea controlerelor permite separarea clară a logicii de gestionare a widget-ului de prezentarea sa.