setState Ekranı Yeniden Çizer
Coddy'nin Flutter Journey'sinin Etkileşimli Uygulamalar bölümünün bir parçası. Ders 11 / 34.
Bu uygulamada Add one düğmesine bas ve Console'u izle: 1, 2, 3. Ekrandaki sayı 0 olarak kalır. Flutter ekranı bir kez oluşturdu ve ona yeniden oluşturmasını söyleyen hiçbir şey olmadı.
Bir StatelessWidget hiçbir zaman değişmez. Değişen bir ekran, iki sınıf olarak yazılan bir StatefulWidget'tır:
class HomePage extends StatefulWidget {
const HomePage({super.key});
@override
State<HomePage> createState() => _HomePageState();
}
class _HomePageState extends State<HomePage> {
int _count = 0;
@override
Widget build(BuildContext context) {
return Text('$_count');
}
}HomePage yalnızca hangi State'in oluşturulacağını belirtir (createState, Değer Döndüren Fonksiyonlar konusundaki ok biçiminde yazılır). _HomePageState işi yapar: _count gibi ekranın verilerini en üstündeki değişkenlerde tutar ve ekranı oluşturur. Ekran var olduğu sürece varlığını sürdürür, bu yüzden _count bir oluşturma işleminden sonrakine değerini korur.
Ekranı değiştirmek için setState içindeki verileri değiştir. Bu, Flutter'a "bu değişti, yeniden oluştur" der ve Text yeni sayıyı gösterir:
setState(() {
_count = _count + 1;
});_HomePageState ve _count adlarının başındaki alt çizgi, adı özel yapar: yalnızca bu dosya onu kullanabilir. Durum sınıflarının ve değişkenlerinin adlarında genellikle bu alt çizgi bulunur.
Görev
OrtaAdd one düğmesine her basışta ekrandaki sayıyı bir artır: _count değerindeki değişikliği setState içine koy.
Kendin dene
import 'package:flutter/material.dart';
void main() {
runApp(const MyApp());
}
class MyApp extends StatelessWidget {
const MyApp({super.key});
@override
Widget build(BuildContext context) {
return MaterialApp(
debugShowCheckedModeBanner: false,
home: HomePage(),
);
}
}
class HomePage extends StatefulWidget {
const HomePage({super.key});
@override
State<HomePage> createState() => _HomePageState();
}
class _HomePageState extends State<HomePage> {
int _count = 0;
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(title: Text('Counter')),
body: Center(
child: Column(
mainAxisSize: MainAxisSize.min,
children: [
Text('$_count', style: TextStyle(fontSize: 48)),
SizedBox(height: 16),
ElevatedButton(
onPressed: () {
_count = _count + 1;
print(_count);
},
child: Text('Add one'),
),
],
),
),
);
}
}
Bu ders kısa bir quiz içerir. Soruları yanıtlamak ve ilerlemeni kaydetmek için derse başla.
Etkileşimli Uygulamalar bölümündeki tüm dersler
7Anahtarlar ve Kaydırıcılar
Bir Anahtarla Açıp KapatmaBir Onay Kutusunu İşaretlemeKaydırıcıyla Bir Değer Seçme3Durum Tutan Widget'lar
Kendi Widget SınıfınızSnackBar GöstermesetState Ekranı Yeniden ÇizerStatefulWidget YazmaSayacı Artırma ve AzaltmaHot Reload Durumu KorurKendi başına pratik yap: Online Flutter derleyicisi