Değer Gönderen Callback’ler
Coddy'nin Flutter Journey'sinin Durum Yönetimi bölümünün bir parçası. Ders 3 / 27.
Bir geri çağırma, bir değeri üst bileşene geri iletebilir. Aşağıdaki beden seçicide üç düğme var ve sayfanın hangisine dokunulduğunu bilmesi gerekiyor.
Geri çağırmaya bir parametre ver. void Function(String) türü, bir String alan ve hiçbir şey döndürmeyen bir fonksiyondur:
class SizePicker extends StatelessWidget {
const SizePicker({super.key, required this.onPick});
final void Function(String) onPick;
@override
Widget build(BuildContext context) {
return OutlinedButton(
onPressed: () => onPick('S'),
child: Text('S'),
);
}
}Her düğme, çağrıyı küçük bir fonksiyonun içine alır: () => onPick('S'); böylece çağrı oluşturma sırasında değil, dokunulduğunda çalışır. Üst bileşen değeri bir parametre olarak alır ve saklar:
SizePicker(
onPick: (picked) {
setState(() {
size = picked;
});
},
)Flutter'da aynı türün kısa bir adı vardır: ValueChanged<String>. TextField bileşeninin onChanged özelliği gibi birçok yerleşik bileşen bunu kullanır.
Görev
OrtaBeden düğmelerini çalışır hâle getir:
SizePickeriçin, kurucusu tarafından ayarlananfinal void Function(String) onPickalanını ekle.- Her düğmenin kendi harfini
onPickişlevine göndermesini sağla. - Sayfada seçilen bedeni göster:
Size: S,Size: MveyaSize: L.
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> {
String size = 'M';
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(title: const Text('T-shirt')),
body: Center(
child: Column(
mainAxisSize: MainAxisSize.min,
children: [
Text('Size: $size', style: const TextStyle(fontSize: 32)),
const SizedBox(height: 16),
const SizePicker(),
],
),
),
);
}
}
class SizePicker extends StatelessWidget {
const SizePicker({super.key});
@override
Widget build(BuildContext context) {
return Row(
mainAxisAlignment: MainAxisAlignment.center,
children: [
OutlinedButton(onPressed: () {}, child: const Text('S')),
const SizedBox(width: 8),
OutlinedButton(onPressed: () {}, child: const Text('M')),
const SizedBox(width: 8),
OutlinedButton(onPressed: () {}, child: const Text('L')),
],
);
}
}
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