Saya ingin memberikan nilai awal ke bidang teks dan menggambar ulang dengan nilai kosong untuk menghapus teks. Apa pendekatan terbaik untuk melakukan itu dengan Flutter's APIs?
143
(Dari milis. Saya tidak menemukan jawaban ini.)
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'),
),
],
);
}
}
Anda dapat menggunakan
TextFormField
alih - alihTextField
, dan menggunakaninitialValue
properti. sebagai contohsumber
Anda tidak perlu mendefinisikan variabel terpisah dalam cakupan widget, cukup lakukan inline:
sumber
sumber
text
properti sesuai dokumenTextEditingController.text
properti: Mengatur ini akan memberi tahu semua pendengar TextEditingController ini yang mereka perlu perbarui (ini disebut notifyListeners). Karena alasan ini, nilai ini hanya boleh ditetapkan di antara frame, misalnya sebagai respons terhadap tindakan pengguna, bukan selama fase pembuatan, tata letak, atau cat. ( api.flutter.dev/flutter/widgets/TextEditingController/text.html )Saya telah melihat banyak cara melakukan ini di sini. Namun saya pikir ini sedikit lebih efisien atau paling tidak ringkas daripada jawaban lainnya.
sumber
Jika Anda ingin menangani beberapa
TextInput
s seperti yang diminta oleh @MRT dalam komentar untuk jawaban yang diterima, Anda dapat membuat fungsi yang mengambil nilai awal dan mengembalikan yangTextEditingController
seperti ini:Kemudian, atur fungsi ini sebagai pengontrol untuk
TextInput
dan berikan nilai awalnya di sana seperti ini:Anda dapat mengulangi ini untuk yang lain
TextInput
.sumber
Ini bisa dicapai dengan menggunakan
TextEditingController
.Untuk memiliki nilai awal, Anda dapat menambahkan
atau
Jika Anda menggunakan
TextFormField
Anda memilikiinitialValue
properti di sana. Yang pada dasarnya menyediakan iniinitialValue
ke controller secara otomatis.Untuk menghapus teks, Anda dapat menggunakan
_controller.clear()
metode.sumber
di dalam kelas,
TextField,
sumber
atau
sumber
Jika Anda belum menemukan jawaban untuk ini dan bagi mereka yang datang ke sini mencari jawaban: Periksa petunjuk
InputDecoration
bidangTeks:sumber