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.