Stateful widget, uygulamanın UI’sını oluşturan ve durumu değişen widget’lardır. Yani, kullanıcı etkileşimlerine veya diğer faktörlere bağlı olarak durumu değişen, yeniden oluşturulması gereken widget’lardır. Örneğin, bir sayaç, bir kullanıcı giriş formu veya bir liste gibi dinamik bileşenler stateful widget olarak tanımlanabilir.
Stateful widget’lar, durumlarını değiştirdiği için stateless widget’lara göre daha fazla kaynak tüketirler, ancak dinamik uygulamalar oluşturmak için gereklidirler. Ayrıca, uygulamanın durumunu yönetmek ve verileri güncellemek için kullanılırlar.
Flutter’da bir stateful widget oluşturmak için, StatefulWidget sınıfından türetilen bir sınıf tanımlanır ve createState() yöntemi uygulanır. createState() yöntemi, stateful widget’ın durumunu yöneten State nesnesini oluşturur.
State nesnesi, build() yöntemi ile birlikte kullanılarak widget’ın durumunu günceller ve yeniden oluşturulmasını sağlar. Ayrıca, setState() yöntemi kullanılarak, stateful widget’ın durumu güncellenir ve widget’ın yeniden oluşturulması tetiklenir.
Örnek olarak, aşağıdaki kod parçası, bir sayacı içeren basit bir stateful widget örneğidir:
class MyWidget extends StatefulWidget {
@override
_MyWidgetState createState() => _MyWidgetState();
}
class _MyWidgetState extends State<MyWidget> {
int _counter = 0;
void _incrementCounter() {
setState(() {
_counter++;
});
}
@override
Widget build(BuildContext context) {
return Column(
children: [
Text('Sayac: $_counter'),
RaisedButton(
onPressed: _incrementCounter,
child: Text('Artır'),
),
],
);
}
}
Yukarıdaki örnekte, MyWidget sınıfı StatefulWidget sınıfından türetilmiştir ve createState() yöntemi, _MyWidgetState sınıfını oluşturur. _MyWidgetState sınıfı, _counter adında bir değişken içerir ve _incrementCounter() yöntemi, setState() yöntemi ile içerideki tüm olayları dinleme yapabilirsiniz.