Ahmet Balaman LogoAhmet Balaman

Flutter: Form Widget ve Girdi Kontrolleri

personAhmet Balaman
calendar_today
FlutterFormValidationTextFormFieldWidgetInput

Form, Flutter'da girdi kontrollerini gruplamak ve validasyon yapmak için kullanılan bir widget'tır. Form sayesinde birden fazla girdi alanını tek bir yapı altında yönetebilir ve toplu validasyon yapabiliriz.

Canlı Demo

Aşağıdaki interaktif örnekte bu widget'ı deneyebilirsiniz:

💡 Eğer yukarıdaki örnek açılmazsa, DartPad linkine tıklayarak yeni sekmede çalıştırabilirsiniz.

💡 Eğer yukarıdaki örnek açılmazsa, DartPad linkine tıklayarak yeni sekmede çalıştırabilirsiniz.

Temel Kullanım

Form widget'ı bir GlobalKey ile yönetilir:

final _formKey = GlobalKey<FormState>();

Form(
  key: _formKey,
  child: Column(
    children: [
      TextFormField(
        validator: (value) {
          if (value == null || value.isEmpty) {
            return 'Bu alan boş bırakılamaz';
          }
          return null;
        },
      ),
      ElevatedButton(
        onPressed: () {
          if (_formKey.currentState!.validate()) {
            // Form geçerli, işlemi yap
          }
        },
        child: Text('Gönder'),
      ),
    ],
  ),
)

TextFormField Özellikleri

TextFormField(
  controller: _controller,
  decoration: InputDecoration(
    labelText: 'E-posta',
    hintText: '[email protected]',
    prefixIcon: Icon(Icons.email),
    suffixIcon: Icon(Icons.check),
    border: OutlineInputBorder(),
    errorBorder: OutlineInputBorder(
      borderSide: BorderSide(color: Colors.red),
    ),
  ),
  validator: (value) => value!.isEmpty ? 'Zorunlu alan' : null,
  keyboardType: TextInputType.emailAddress,
  textInputAction: TextInputAction.next,
  obscureText: false, // Şifre için true
  maxLength: 50,
  maxLines: 1,
)

Validasyon Fonksiyonları

// E-posta validasyonu
String? validateEmail(String? value) {
  if (value == null || value.isEmpty) {
    return 'E-posta gerekli';
  }
  final regex = RegExp(r'^[\w-\.]+@([\w-]+\.)+[\w-]{2,4}$');
  if (!regex.hasMatch(value)) {
    return 'Geçersiz e-posta formatı';
  }
  return null;
}

// Şifre validasyonu
String? validatePassword(String? value) {
  if (value == null || value.length < 6) {
    return 'Şifre en az 6 karakter olmalı';
  }
  return null;
}

Form Metodları

Metod Açıklama
validate() Tüm alanları doğrular
save() onSaved callback'lerini çağırır
reset() Formu sıfırlar

AutovalidateMode

Form(
  key: _formKey,
  autovalidateMode: AutovalidateMode.onUserInteraction,
  // AutovalidateMode.disabled - Manuel validasyon
  // AutovalidateMode.always - Her zaman validasyon
  // AutovalidateMode.onUserInteraction - Kullanıcı etkileşiminde
  child: ...
)

onSaved Kullanımı

String? _email;

TextFormField(
  onSaved: (value) {
    _email = value;
  },
)

// Form gönderildiğinde
if (_formKey.currentState!.validate()) {
  _formKey.currentState!.save(); // onSaved'ları çağırır
  print(_email);
}

Özet

  • Form: Girdi alanlarını gruplar
  • GlobalKey: Form durumunu yönetir
  • TextFormField: Validasyonlu text input
  • validator: Doğrulama fonksiyonu
  • validate(): Tüm alanları kontrol eder

Form widget'ı, kullanıcı girdilerini yönetmek için vazgeçilmezdir.

Yorumlar