Sobes.tech
Middle

Zašto se koriste kontroleri widget-a u Flutteru?

sobes.tech АИ

Одговор од АИ

U Flutter-u, kontroleri widgeta koriste se za upravljanje stanjem ili ponašanjem određenog widgeta spolja, kao i za interakciju s njim.

Glavni ciljevi korišćenja:

  • Programsko upravljanje: Izmena svojstava widgeta (npr. skrolovanje liste, upravljanje kurzorom u tekstualnom polju) bez direktne interakcije korisnika.
  • Prikupljanje informacija: Čitanje trenutnog stanja widgeta (npr. trenutna pozicija skrolovanja, uneti tekst).
  • Reakcija na događaje: Izvršavanje akcija povezanih sa widgetom kao odgovor na događaje u drugim delovima aplikacije.

Primeri popularnih kontrolera:

  • TextEditingController: Upravljanje tekstualnim poljima (TextField, TextFormField). Omogućava dobijanje i postavljanje teksta, upravljanje izborom i pozicijom kursora.
    final myController = TextEditingController();
    
    // Dobijanje teksta iz polja
    final text = myController.text;
    
    // Postavljanje teksta u polje
    myController.text = 'Novi tekst';
    
  • ScrollController: Upravljanje skrolujućim widgetima (ListView, GridView, SingleChildScrollView). Omogućava programatsko skrolovanje, dobijanje trenutne pozicije i slušanje događaja skrolovanja.
    final myScrollController = ScrollController();
    
    // Skrolovanje do početka
    myScrollController.animateTo(
      0,
      duration: Duration(milliseconds: 500),
      curve: Curves.easeOut,
    );
    
    // Dobijanje trenutne pozicije skrolovanja
    final position = myScrollController.position.pixels;
    
  • PageController: Upravljanje stranicama u widgetima (PageView). Omogućava prebacivanje između stranica, dobijanje trenutne stranice i slušanje događaja promene stranice.
    final myPageController = PageController();
    
    // Prelazak na sledeću stranicu
    myPageController.nextPage(
      duration: Duration(milliseconds: 300),
      curve: Curves.easeIn,
    );
    
    // Dobijanje trenutne stranice
    final currentPage = myPageController.page;
    

Kontroleri se obično prosleđuju odgovarajućem widgetu putem njegovog konstruktora. Upravljanje životnim ciklusom kontrolera (kreiranje i brisanje) treba obavljati u widgetu koji ga koristi, često u metodi initState za kreiranje i dispose za brisanje.

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(); // Važno je osloboditi resurse
    super.dispose();
  }

  @override
  Widget build(BuildContext context) {
    return TextField(
      controller: _textController,
      // ... ostala svojstva TextField
    );
  }
}

Korišćenje kontrolera omogućava jasno odvajanje logike upravljanja widgetom od njegovog prikaza.