CodeBlanks Logo Icon CodeBlanks

Özet - TextFormField

TextFormField ve controller'ı birleştirerek giriş formu yaparsın.

Üç parçayı birleştir

Bir giriş formu yapmak için üç parçayı birleştirirsin: TextFormField widget'ı, TextEditingController (girdiyi yönetmek için) ve InputDecoration (etiket ve ipucu için). Controller, State içinde oluşturulup dispose edilir ve TextFormField'a bağlanır. Decoration da aynı alana verilir.

TextFormField(
  controller: controller,
  decoration: InputDecoration(
    labelText: 'Ad',
  ),
)

Uygulama Giriş formu yap

kayit adında bir fonksiyon yaz; çağrılınca Kayit yazdırsın. main içinde kayit'i çağır. KayitFormu adında bir StatefulWidget yaz; State içinde bir TextEditingController oluştur, dispose et ve bir TextFormField'a controller ve decoration olarak bağla. labelText 'Ad' olsun.

Başlangıç kodu

main.dart
import 'package:flutter/material.dart';

// kayit fonksiyonu yaz: "Kayit" yazdirsin
// KayitFormu adinda StatefulWidget yaz
// State icinde controller olustur ve dispose et
// TextFormField'a controller ve decoration bagla

void main() {
  // kayit'i cagir
  runApp(const Uygulama());
}

class Uygulama extends StatelessWidget {
  const Uygulama({super.key});

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        body: Center(
          // KayitFormu'nu ekle
          child: SizedBox(),
        ),
      ),
    );
  }
}

Örnek çözüm

main.dart
import 'package:flutter/material.dart';

void kayit() {
  print('Kayit');
}

void main() {
  kayit();
  runApp(const Uygulama());
}

class Uygulama extends StatelessWidget {
  const Uygulama({super.key});

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        body: Center(
          child: KayitFormu(),
        ),
      ),
    );
  }
}

class KayitFormu extends StatefulWidget {
  const KayitFormu({super.key});

  @override
  State<KayitFormu> createState() => _KayitFormuState();
}

class _KayitFormuState extends State<KayitFormu> {
  final TextEditingController _controller = TextEditingController();

  @override
  void dispose() {
    _controller.dispose();
    super.dispose();
  }

  @override
  Widget build(BuildContext context) {
    return TextFormField(
      controller: _controller,
      decoration: InputDecoration(
        labelText: 'Ad',
      ),
    );
  }
}

Beklenen çıktı

Kayit

Soru ve cevaplar

Dersin sorularını cevaplarıyla birlikte inceleyebilirsin. Kendini denemek istersen dersi interaktif olarak çöz.

1 Bir giriş formu için hangi parçalar bir arada kullanılır?

  • ListView + ListTile + Separator
  • Column + Row + SizedBox
  • Text + Padding + Center
  • TextFormField + TextEditingController + InputDecoration Doğru cevap

Açıklama: Giriş formu için TextFormField (giriş widget'ı), TextEditingController (girdiyi denetleme) ve InputDecoration (etiket ve ipucu) birlikte kullanılır.

2 decoration parametresini ekle

Soru
TextFormField(
  controller: myController,
  ____: InputDecoration(
    labelText: 'Ad',
  ),
)
Cevap
TextFormField(
  controller: myController,
  decoration: InputDecoration(
    labelText: 'Ad',
  ),
)

Açıklama: InputDecoration'ı bağlamak için decoration parametresi kullanılır; style, theme veya label diye parametre yoktur.

3 Form özeti

Kavram Anlamı
TextFormField Metin girişi widget'ı
TextEditingController Girdiyi denetleyen sınıf
InputDecoration Etiket ve ipucu sağlar
dispose Controller'ı temizler

Başlangıç bölümündeki tüm dersler