Câu trả lời:
(Từ danh sách gửi thư. Tôi không đưa ra câu trả lời này.)
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'),
),
],
);
}
}
Bạn có thể sử dụng TextFormField
thay thế TextField
và sử dụng initialValue
tài sản. ví dụ
TextFormField(initialValue: "I am smart")
Bạn không phải xác định một biến riêng trong phạm vi widget, chỉ cần thực hiện nội tuyến:
TextField(
controller: TextEditingController()..text = 'Your initial value',
onChanged: (text) => {},
)
Nếu bạn đang sử dụng TextEditingControll thì hãy đặt văn bản thành nó, như bên dưới
TextEditingController _controller = new TextEditingController();
_controller.text = 'your initial text';
final your_text_name = TextFormField(
autofocus: false,
controller: _controller,
decoration: InputDecoration(
hintText: 'Hint Value',
),
);
và nếu bạn không sử dụng bất kỳ TextEditingCont kiểm soát nào thì bạn có thể trực tiếp sử dụng initValue như bên dưới
final last_name = TextFormField(
autofocus: false,
initialValue: 'your initial text',
decoration: InputDecoration(
hintText: 'Last Name',
),
);
Để tham khảo thêm TextEditingCont kiểm
text
tính theo tài liệu của TextEditingController.text
tài sản hay không: Cài đặt này sẽ thông báo cho tất cả những người nghe về TextEditingContoder này mà họ cần cập nhật (nó gọi notifyListener). Vì lý do này, giá trị này chỉ nên được đặt giữa các khung, ví dụ như để đáp ứng với hành động của người dùng, không phải trong các giai đoạn xây dựng, bố trí hoặc sơn. ( api.flutter.dev/flutter/widgets/TextEditingControll/text.html )
Nếu bạn muốn xử lý nhiều TextInput
s như yêu cầu của @MRT trong nhận xét cho câu trả lời được chấp nhận, bạn có thể tạo một hàm lấy giá trị ban đầu và trả về TextEditingController
như sau:
initialValue(val) {
return TextEditingController(text: val);
}
Sau đó, đặt chức năng này làm bộ điều khiển cho TextInput
và cung cấp giá trị ban đầu của nó như thế này:
controller: initialValue('Some initial value here....')
Bạn có thể lặp lại điều này cho các TextInput
s khác .
Điều này có thể đạt được bằng cách sử dụng TextEditingController
.
Để có giá trị ban đầu, bạn có thể thêm
TextEditingController _controller = TextEditingController(text: 'initial value');
hoặc là
Nếu bạn đang sử dụng TextFormField
bạn có một initialValue
tài sản ở đó. Mà về cơ bản cung cấp điều này initialValue
cho bộ điều khiển tự động.
TextEditingController _controller = TextEditingController();
TextFormField(
controller: _controller,
initialValue: 'initial value'
)
Để xóa văn bản, bạn có thể sử dụng
_controller.clear()
phương pháp.
TextEdittingController _controller = new TextEdittingController(text: "your Text");
hoặc là
@override
void initState() {
super.initState();
_Controller.text = "Your Text";
}
Nếu bạn chưa tìm thấy câu trả lời cho điều này và cho những người đến đây tìm kiếm câu trả lời: InputDecoration
Hãy kiểm tra gợi ý của trường:
new TextField(
decoration: new InputDecoration(
hintText:"My Text String."
),
...