State’i Alt Bileşene Aktarma
Coddy'nin Flutter Journey'sinin Durum Yönetimi bölümünün bir parçası. Ders 1 / 27.
Bir uygulama birçok widget'tan oluşur ve küçük bir widget'ın çoğu zaman daha büyük bir widget'ın sahip olduğu bir değere ihtiyacı olur. Burada puan, sayfanın State nesnesinde tutulur; ancak puanı gösteren pano, kendi başına bir widget'tır.
Bir değeri aşağıya aktarmak için çocuğa bir final alanı ekleyin ve kurucuda bu değeri isteyin:
class ScoreBoard extends StatelessWidget {
const ScoreBoard({super.key, required this.score});
final int score;
@override
Widget build(BuildContext context) {
return Text('Score: $score');
}
}Ebeveyn, çocuğu her oluşturduğunda kendi değerini aktarır: ScoreBoard(score: score). Ebeveyn setState çağırdığında yeniden oluşturulur ve pano yeni sayıyı alır.
Çocuk değeri hiçbir zaman değiştirmez. Kendisine verilen değeri gösterir ve puanın tek sahibi ebeveyn olmaya devam eder.
Görev
Kolay+1 düğmesi puanları artırıyor, ancak skor tablosunda her zaman Score: 0 yazıyor.
ScoreBoardsınıfına, kurucusu tarafından ayarlanan birfinal int scorealanı ekle.- Metnini
Score:ve ardından bu puan olacak şekilde ayarla. - Sayfa skor tablosunu oluştururken sayfanın
scoredeğerini aktar.
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 const MaterialApp(
debugShowCheckedModeBanner: false,
home: HomePage(),
);
}
}
class HomePage extends StatefulWidget {
const HomePage({super.key});
@override
State<HomePage> createState() => _HomePageState();
}
class _HomePageState extends State<HomePage> {
int score = 0;
@override
Widget build(BuildContext context) {
return Scaffold(
body: Center(
child: Column(
mainAxisSize: MainAxisSize.min,
children: [
const ScoreBoard(),
const SizedBox(height: 16),
ElevatedButton(
onPressed: () {
setState(() {
score++;
});
},
child: const Text('+1'),
),
],
),
),
);
}
}
class ScoreBoard extends StatelessWidget {
const ScoreBoard({super.key});
@override
Widget build(BuildContext context) {
return const Text('Score: 0', style: TextStyle(fontSize: 32));
}
}
Bu ders kısa bir quiz içerir. Soruları yanıtlamak ve ilerlemeni kaydetmek için derse başla.
Durum Yönetimi bölümündeki tüm dersler
1State’i Üst Bileşene Taşıma
State’i Alt Bileşene AktarmaAlt Bileşene Bir Callback AktarmaDeğer Gönderen Callback’lerState’i Üst Bileşene TaşımaKendi başına pratik yap: Online Flutter derleyicisi