Bir metin alanına nasıl bir başlangıç ​​değeri sağlayabilirim?


144

Bir metin alanına bir başlangıç ​​değeri sağlamak ve metni temizlemek için boş bir değerle yeniden çizmek istiyorum. Flutter'ın API'leri ile bunu yapmak için en iyi yaklaşım nedir?

Yanıtlar:


105

(Posta listesinden. Bu cevabı ben bulmadım.)

class _FooState extends State<Foo> {
  TextEditingController _controller;

  @override
  void initState() {
    super.initState();
    _controller = new TextEditingController(text: 'Initial value');
  }

  @override
  Widget build(BuildContext context) {
    return new Column(
      children: <Widget>[
        new TextField(
          // The TextField is first built, the controller has some initial text,
          // which the TextField shows. As the user edits, the text property of
          // the controller is updated.
          controller: _controller,
        ),
        new RaisedButton(
          onPressed: () {
            // You can also use the controller to manipuate what is shown in the
            // text field. For example, the clear() method removes all the text
            // from the text field.
            _controller.clear();
          },
          child: new Text('CLEAR'),
        ),
      ],
    );
  }
}

Sanırım sunucuları aynı amaca yönlendiriyor.
dhuma1981

3
Cevapta hangi posta listesine atıfta bulunduğunuzu merak ettiniz mi?
stt106

2
Ve metin alanı değerini başlangıç ​​değerine nasıl ekleriz / geçersiz kılarız?
stuckedoverflow

2
Ayrıca, _controller'ı widget'ın elden çıkardığından emin olun. Google tarafından tavsiye edilmektedir. İhtiyaç duyulmadığında kaynakların serbest kalmasını sağlar.
Amrit Pal Singh

90

Bunun TextFormFieldyerine a TextFieldkullanabilir ve initialValueözelliği kullanabilirsiniz . Örneğin

TextFormField(initialValue: "I am smart")

2
Bazı nedenlerden dolayı bunu dinamik bir nesneyle kullanamadım. Denetleyiciye ihtiyaç duyuldu.
S1r-Lanzelot

6
Bu, yalnızca bir denetleyici TextFormField ile belirtilmediğinde geçerlidir. docs.flutter.io/flutter/material/TextFormField/…
Alex Fallenstedt

1
@AlexFallenstedt denetleyici kullanılabilir olduğunda bu özelliğe gerek yoktur
Sami Kanafani

Bunun riskli olduğunu düşünüyorum çünkü pencere öğesi ağacınızı yeniden oluştururken metniniz başlangıç ​​değeriyle değiştirilebilir.
Gökberk Yağcı

48

Widget kapsamında ayrı bir değişken tanımlamanız gerekmez, sadece satır içi yapın:

TextField(
  controller: TextEditingController()..text = 'Your initial value',
  onChanged: (text) => {},
)

"TextEditingController () .. text" içindeki çift nokta ile ne kastedilmektedir?
Ray Li

3
@RayLi Buna kademeli operatör denir. Bilgi ve örnek için burayı kontrol edin stackoverflow.com/questions/53136945/…
vovahost

1
Teşekkürler!. Bu, nesne listelerinden dinamik widget oluşturma için mükemmel :)
davaus

Bu aradığım şey !! Çok teşekkürler!
TaeJung Shim

1
@vovahost maalesef elden çıkarma kısmı eksik.
Chris Rutkowski

28

TextEditingController kullanıyorsanız , aşağıdaki gibi metni ona ayarlayın

TextEditingController _controller = new TextEditingController();


_controller.text = 'your initial text';

final your_text_name = TextFormField(
      autofocus: false,
      controller: _controller,
      decoration: InputDecoration(
        hintText: 'Hint Value',
      ),
    );

ve herhangi bir TextEditingController kullanmıyorsanız , aşağıdaki gibi initialValue'yu doğrudan kullanabilirsiniz.

final last_name = TextFormField(
      autofocus: false,
      initialValue: 'your initial text',
      decoration: InputDecoration(
        hintText: 'Last Name',
      ),
    );

Daha fazla referans için TextEditingController


textÖzellik belgelerine göre ilk değeri özelliğe ayarlamanın iyi bir fikir olup olmadığından emin değilim TextEditingController.text: Bunu ayarlamak, bu TextEditingController'ın tüm dinleyicilerini güncellemeleri gerektiği konusunda bilgilendirir (notifyListeners'ı çağırır). Bu nedenle, bu değer yalnızca çerçeveler arasında ayarlanmalıdır; örneğin, kullanıcı eylemlerine yanıt olarak; oluşturma, yerleşim veya boyama aşamaları sırasında değil. ( api.flutter.dev/flutter/widgets/TextEditingController/text.html )
Kirill Karmazin

16

Bunu yapmanın birçok yolunu burada gördüm. Ancak bunun diğer cevaplardan biraz daha etkili veya en azından özlü olduğunu düşünüyorum.

TextField(
   controller: TextEditingController(text: "Initial Text here"),
)

7

TextInputKabul edilen cevaba yönelik yorumda @MRT tarafından sorulan birden çok s ile işlem yapmak istiyorsanız, bir başlangıç ​​değeri alan ve şuna TextEditingControllerbenzer bir döndüren bir işlev oluşturabilirsiniz :

initialValue(val) {
  return TextEditingController(text: val);
}

Ardından, bu işlevi denetleyici olarak ayarlayın TextInputve başlangıç ​​değerini şu şekilde sağlayın:

controller: initialValue('Some initial value here....')

Bunu diğer TextInpute- postalar için tekrarlayabilirsiniz .


5

Bu kullanılarak elde edilebilir TextEditingController.

Bir başlangıç ​​değerine sahip olmak için ekleyebilirsiniz

TextEditingController _controller = TextEditingController(text: 'initial value');

veya

Eğer kullanıyorsanız orada TextFormFieldbir initialValuemülkünüz var. Temelde bunu initialValuedenetleyiciye otomatik olarak sağlar.

TextEditingController _controller = TextEditingController();
TextFormField(
  controller: _controller,
  initialValue: 'initial value'
)

Metni temizlemek için _controller.clear()yöntemi kullanabilirsiniz .


3

sınıf içi

  final usernameController = TextEditingController(text: 'bhanuka');

Metin alanı,

   child: new TextField(
        controller: usernameController,
    ...
)

3
TextEdittingController _controller = new TextEdittingController(text: "your Text");

veya

@override
  void initState() {
    super.initState();
    _Controller.text = "Your Text";
    }

-12

Bunun cevabını bulamadıysanız ve buraya bir cevap arayanlar için: InputDecorationAlanın hintText'ine bakın:

new TextField(
  decoration: new InputDecoration(
    hintText:"My Text String."
  ),
...

İpucu metni başlangıç ​​değeri değildir. Kullanıcı bir şey yazdığında kaybolur. İlk metin, kullanıcı için önceden bir şeyler yazmak gibidir.
Arman Ordookhani

Bu, Değer başlatıcı Değil İpuçları metni
MRT

2
Bu doğru, ancak bu, ipucu metni arayanlar için iyidir, ancak buna ne ad vereceğini bilmeyenler için.
ThinkDigital
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.