Middle
Flutter'da widget denetleyicileri ne için kullanılır?
sobes.tech yapay zeka
AI'dan gelen yanıt
Flutter'da widget denetleyicileri, belirli bir widget'in durumunu veya davranışını dışarıdan yönetmek ve onunla etkileşim kurmak için kullanılır.
Kullanım amaçları:
- Programatik yönetim: Kullanıcıyla doğrudan etkileşim olmadan widget özelliklerini değiştirme (örneğin, liste kaydırma, metin alanında imleç kontrolü).
- Bilgi alma: Widget'in mevcut durumunu okuma (örneğin, mevcut kaydırma konumu, girilen metin).
- Olaylara yanıt verme: Uygulamanın diğer bölümlerindeki olaylara yanıt olarak widget ile ilgili işlemler yapma.
Popüler denetleyici örnekleri:
TextEditingController: Metin alanlarının yönetimi (TextField,TextFormField). Metni alma ve ayarlama, seçim ve imleç konumunu yönetme imkanı sağlar.final myController = TextEditingController(); // Alanın içeriğini alma final text = myController.text; // Alana yeni metin ayarlama myController.text = 'Yeni metin';ScrollController: Kaydırılabilir widget'ların yönetimi (ListView,GridView,SingleChildScrollView). Programlı kaydırma, mevcut kaydırma konumunu alma ve kaydırma olaylarını dinleme imkanı sağlar.final myScrollController = ScrollController(); // Başa kaydır myScrollController.animateTo( 0, duration: Duration(milliseconds: 500), curve: Curves.easeOut, ); // Mevcut kaydırma konumunu alma final position = myScrollController.position.pixels;PageController: Sayfa widget'larının yönetimi (PageView). Sayfalar arasında geçiş yapma, mevcut sayfayı alma ve sayfa değişikliklerini dinleme.final myPageController = PageController(); // Bir sonraki sayfaya geç myPageController.nextPage( duration: Duration(milliseconds: 300), curve: Curves.easeIn, ); // Mevcut sayfayı alma final currentPage = myPageController.page;
Kontrolörler genellikle ilgili widget'ın yapıcısı aracılığıyla iletilir. Kontrolörün yaşam döngüsü (oluşturma ve silme) kullanıldığı widget'ta, genellikle initState metodunda oluşturulmalı ve dispose metodunda serbest bırakılmalıdır.
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(); // Kaynakları serbest bırakmak önemli
super.dispose();
}
@override
Widget build(BuildContext context) {
return TextField(
controller: _textController,
// ... diğer TextField özellikleri
);
}
}
Kontrolörlerin kullanımı, widget'ın yönetim mantığını görünümünden ayırmaya olanak tanır.