onSaved
- Flutter kursu
- Orta seviye
- Ders 33/99
- 4 dk
onSaved callback ile form verisini toplamayı öğrenirsin.
onSaved nedir?
onSaved, bir TextFormField'a verilen callback'dir. Form kaydedilirken çağrılır ve alanın değerini alıp bir değişkende tutmanı sağlar.
String? _isim;
TextFormField(
onSaved: (deger) {
_isim = deger;
},
)onSaved, save metodu çağrılınca tetiklenir.
FormState.save
_formKey.currentState!.save() çağrıldığında, formdaki her TextFormField'ın onSaved callback'i çalıştırılır. Bu sayede tüm alan değerlerini değişkenlere aktarırsın.
String? _isim;
String? _eposta;
if (_formKey.currentState!.validate()) {
_formKey.currentState!.save();
print('İsim: $_isim');
}save, validate başarılı olduktan sonra çağrılır.
Uygulama onSaved ile veri topla
Ekrani stateful widget'ında _formKey ve _isim değişkeni tanımla. Form içine bir TextFormField koy; onSaved ile değeri _isim'e ata. Butona basıldığında validate başarılıysa save çağır ve print('isim: $_isim') yaz. main'de print('form başladı') çağır.
Başlangıç kodu
import 'package:flutter/material.dart';
void main() {
print('form başladı');
runApp(MaterialApp(home: Ekrani()));
}
class Ekrani extends StatefulWidget {
@override
_EkraniState createState() => _EkraniState();
}
class _EkraniState extends State<Ekrani> {
// _formKey ve _isim ekle
@override
Widget build(BuildContext context) {
return Scaffold(
body: Padding(
padding: EdgeInsets.all(16),
child: Form(
key: _formKey,
child: Column(
children: [
TextFormField(
// onSaved ekle
),
ElevatedButton(
onPressed: () {
// validate ve save çağır
},
child: Text('Kaydet'),
),
],
),
),
),
);
}
}Örnek çözüm
import 'package:flutter/material.dart';
void main() {
print('form başladı');
runApp(MaterialApp(home: Ekrani()));
}
class Ekrani extends StatefulWidget {
@override
_EkraniState createState() => _EkraniState();
}
class _EkraniState extends State<Ekrani> {
final _formKey = GlobalKey<FormState>();
String? _isim;
@override
Widget build(BuildContext context) {
return Scaffold(
body: Padding(
padding: EdgeInsets.all(16),
child: Form(
key: _formKey,
child: Column(
children: [
TextFormField(
onSaved: (deger) {
_isim = deger;
},
),
ElevatedButton(
onPressed: () {
if (_formKey.currentState!.validate()) {
_formKey.currentState!.save();
print('isim: $_isim');
}
},
child: Text('Kaydet'),
),
],
),
),
),
);
}
}Beklenen çıktı
form başladı
Soru ve cevaplar
Dersin sorularını cevaplarıyla birlikte inceleyebilirsin. Kendini denemek istersen dersi interaktif olarak çöz.
1 onSaved callback ne zaman çağrılır?
- Kullanıcı her tuşa bastığında
- Form build edildiğinde
- Form save metodu çağrıldığında Doğru cevap
- Yalnızca initState'te
Açıklama: onSaved callback, FormState.save çağrıldığında her TextFormField için tetiklenir; bu sayede alan değerleri toplanır.
2 FormState.save çağrısını ekle
if (_formKey.currentState!.validate()) {
_formKey.currentState!.____();
print('kaydedildi');
}
if (_formKey.currentState!.validate()) {
_formKey.currentState!.save();
print('kaydedildi');
}
Açıklama: FormState.save() çağrıldığında her TextFormField'ın onSaved callback'i çalışır; alan değerleri değişkenlere aktarılır.
3 onSaved parçaları
| Kavram | Anlamı |
|---|---|
onSaved |
Alan değerini toplamak için callback |
save |
Tüm onSaved'ları tetikleyen metod |
FormState |
save metodunun çağrıldığı state |
validate |
save öncesi yapılan doğrulama |