Middle
Do czego służą kontrolery widżetów w Flutterze?
sobes.tech AI
Odpowiedź od AI
Kontrolery widżetów w Flutterze służą do zarządzania stanem lub zachowaniem konkretnego widżetu z zewnątrz, a także do interakcji z nim.
Główne cele użycia:
- Programowe zarządzanie: Zmiana właściwości widżetu (np. przewijanie listy, kontrola kursora w polu tekstowym) bez bezpośredniej interakcji użytkownika.
- Pozyskiwanie informacji: Odczytanie aktualnego stanu widżetu (np. bieżąca pozycja przewijania, wprowadzony tekst).
- Reakcja na zdarzenia: Wykonywanie działań związanych z widżetem w odpowiedzi na zdarzenia w innych częściach aplikacji.
Przykłady popularnych kontrolerów:
TextEditingController: Zarządzanie polami tekstowymi (TextField,TextFormField). Pozwala na pobieranie i ustawianie tekstu, zarządzanie zaznaczeniem i pozycją kursora.final myController = TextEditingController(); // Pobierz tekst z pola final text = myController.text; // Ustaw tekst w polu myController.text = 'Nowy tekst';ScrollController: Zarządzanie przewijalnymi widżetami (ListView,GridView,SingleChildScrollView). Pozwala na programowe przewijanie, pobieranie bieżącej pozycji przewijania i słuchanie zdarzeń przewijania.final myScrollController = ScrollController(); // Przewiń do początku myScrollController.animateTo( 0, duration: Duration(milliseconds: 500), curve: Curves.easeOut, ); // Pobierz bieżącą pozycję przewijania final position = myScrollController.position.pixels;PageController: Zarządzanie widżetami stron (PageView). Pozwala na przełączanie między stronami, pobieranie bieżącej strony i słuchanie zdarzeń zmiany strony.final myPageController = PageController(); // Przejdź do następnej strony myPageController.nextPage( duration: Duration(milliseconds: 300), curve: Curves.easeIn, ); // Pobierz bieżącą stronę final currentPage = myPageController.page;
Kontrolery zazwyczaj przekazywane są do odpowiedniego widżetu przez jego konstruktor. Zarządzanie cyklem życia kontrolera (tworzenie i usuwanie) powinno odbywać się w widżecie, który go używa, często w metodzie initState do tworzenia i dispose do usuwania.
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(); // Ważne jest zwolnienie zasobów
super.dispose();
}
@override
Widget build(BuildContext context) {
return TextField(
controller: _textController,
// ... inne właściwości TextField
);
}
}
Użycie kontrolerów pozwala na wyraźne oddzielenie logiki zarządzania widżetem od jego prezentacji.