TextField içerisine girilen verinin anında güncellenmesi

TextField Yazının Anında Güncellenmesi – onChanged

Merhaba Arkadaşlar;

TextField içerisine kullanıcıdan veri alabilen önemli widgetlardan biridir. İlgili yazımızda TextField hakkında detaylı bilgi verilmektedir. Burada uygulamaya odaklandık.

Ne Yapıyoruz?

Bir TextField oluşturuyoruz ve içerisine girdiğimiz karakterlerin anında üst tarafına koyacağımız bir Text içerisinde gösterilmesi.

TextField Uygulama

Hadi Yapalım

Öncelikle Stateful Widget alt yapısında oluşturuyoruz. İçerisindeki veriyi alıp güncelleme işlemleri için SetState metodu gerekiyor ve buda bu altyapı içerisinde sağlanıyor.

İçerisine bir Scaffold koyuyoruz. body kısmına tasarım yapacağız.

Scaffold içerisine bir Container Widget yerleştiriyorum ve içerisine Column Widget koyuyorum. Column Widget içerisde childeren parametresi bulundurduğu için alt alta TextTextField widgetlarımı koyabiliyorum.

Aşağıda görselimi oluşturduğum Ana Çatımın Kodlarını yazdım. Bundan sonraki kodları uzun olmaması adına kısa tutuyorum, yapılacak değişiklikler bu ana kodlar içerisinde olacak.

import 'package:flutter/material.dart';

void main() => runApp(Uygulamam());

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

  @override
  State<StatefulWidget> createState() {
    return _UygulamamState();
  }
}

class _UygulamamState extends State {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(title: Text("TextField Uygulaması"),),
        body: Container(
          child: Column(
            children:  [
              Text("Merhaba Flutter"),
              TextField()
            ],
          ),
        ),
      ),
    );
  }
}

Öncelikle şu Text(“Merhaba Flutter”) yazısını biraz büyütelim ve varsayılan olarak orayı boş bırakabiliriz ancak biz bu şekilde bıraktık.

Daha güzel bir görünüm elde edebilmek için Container Widget’ıma gerekli ayarları yapıyorum. Şimdilik Container’ıma aşağıdaki ayarları verdim. Container’ımın genişliğini ekran boyutu kadar yaptım. İçerisindekilere sağdan ve soldan 100 boşluk verdim. Yüksekliğinide 200 yaptım.

padding: const EdgeInsets.only(left: 100, right: 100),
width: double.maxFinite,
height: 200,

Şimdi TextField’ıma bir tasarım eklemek istiyorum. Görsel olarak daha güzel gözüksün. Kenarlarına bir bordür ekleyelim. İç rengini değiştirelim. İçerisine yazdığımız yazının rengi değişsin, içerisindeki cursorun rengi değişsin. Yine içerisinde soluk bir renkle yazını bekliyorum yazsın.

Aşağıdaki gibi bir görünüm elde ettim. Tüm kodlar altta verilmiştir.

TextField Uygulama Örneği
import 'package:flutter/material.dart';

void main() => runApp(Uygulamam());

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

  @override
  State<StatefulWidget> createState() {
    return _UygulamamState();
  }
}

class _UygulamamState extends State {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(title: const Text("TextField Uygulaması"),),
        body: Container(
          padding: const EdgeInsets.only(left: 100, right: 100),
          width: double.maxFinite,
          height: 200,
          child: Column(
            mainAxisAlignment: MainAxisAlignment.spaceEvenly,
            children: [
               Text(
                "Merhaba Flutter",
                style: TextStyle(fontSize: 20, color: Colors.blue),
              ),
              TextField(

                decoration: InputDecoration(
                    border: OutlineInputBorder(),
                    //bordür verdim
                    contentPadding: EdgeInsets.all(20),
                    //içerisindeki yazının etrafına 20 boşluk verdim
                    hintText: "Yazını Bekliyorum",
                    //içerisine varsayılan yazı yazdım
                    hintStyle: TextStyle(color: Colors.white),
                    //varsayılan yazının stilini değiştirdim
                    filled: true,
                    //içerisini renkle doldurayım mı? evet dedim
                    fillColor: Colors.deepPurple),
                //içerisini mor renk yaptım
                autofocus: true,
                //açılınca drekt içerisine odaklansın istedim
                cursorColor: Colors.black12,
                //içerisinde yanıp sönen cursorü siyah yaptım
              ),     
            ],
          ),
        ),
      ),
    );
  }
}

TextField onChanged Kullanımı

onChanged, TextField içerisindeki veriyi anlık olarak okumamıza olanak tanır.

Öncelikle onChange’ten gelen yani TextField içerisindeki yazıyı bir değişkende saklayalım. Bunun içinde State bazında bir değişken tanımlayalım. Örneğin String _yeniYazi=”Merhaba Flutter”; olsun.

class _UygulamamState extends State {
  String _yeniYazi="Merhaba Flutter";

Şimdi bu _yeniYazi değişkenine TextField içerisinde yazılan yazının gönderilmesi gerekiyor. Onu da onChanged ile alıyoruz.

onChanged:(String TextFieldIcındekiYazi){ _yeniYazi=TextFieldIcındekiYazi } şeklinde bir kullanımı vardır. Anlamı şudur: bana String tipinde bir değişken tanı, adını sen ver, Ben bu değişkenin içerisine TextField’taki yazıyı aktarıyorum. Sende benim süslü parantezlerim içerisinde bunu istediğin gibi kullan.

Biz en üstte _yeniYazi diye bir değişken tanımlamıştık. Şimdi buna aktarıyoruz.

Ancak karakter girerken sürekli state güncellemesi yapılması gerektiği için setState((){}) içerisinde olmalı.

Yine Text içerisinde Merhaba Flutter yazısı _yeniYazi Değişkeni ile değiştirilmeli.

Evet herşey tamam.

TextField Uygulama

Uygulamanın son hali aşağıda kod olarak verilmiştir.

import 'package:flutter/material.dart';

void main() => runApp(Uygulamam());

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

  @override
  State<StatefulWidget> createState() {
    return _UygulamamState();
  }
}

class _UygulamamState extends State {
  String _yeniYazi = "Merhaba Flutter";

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: const Text("TextField Uygulaması"),
        ),
        body: Container(
          padding: const EdgeInsets.only(left: 100, right: 100),
          width: double.maxFinite,
          height: 200,
          child: Column(
            mainAxisAlignment: MainAxisAlignment.spaceEvenly,
            children: [
              Text(
                _yeniYazi,
                style: TextStyle(fontSize: 20, color: Colors.blue),
              ),
              TextField(
                onChanged: (String TextFieldIcindekiYazi) {
                  setState(() {
                    _yeniYazi = TextFieldIcindekiYazi;
                  });
                },

                decoration: const InputDecoration(
                    border: OutlineInputBorder(),
                    //bordür verdim
                    contentPadding: EdgeInsets.all(20),
                    //içerisindeki yazının etrafına 20 boşluk verdim
                    hintText: "Yazını Bekliyorum",
                    //içerisine varsayılan yazı yazdım
                    hintStyle: TextStyle(color: Colors.white),
                    //varsayılan yazının stilini değiştirdim
                    filled: true,
                    //içerisini renkle doldurayım mı? evet dedim
                    fillColor: Colors.deepPurple),
                //içerisini mor renk yaptım
                autofocus: true,
                //açılınca drekt içerisine odaklansın istedim
                cursorColor: Colors.black12,
                //içerisinde yanıp sönen cursorü siyah yaptım
              ),
            ],
          ),
        ),
      ),
    );
  }
}

Yorum bırakın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir