Відповіді:
(Із списку розсилки. Я не придумав цієї відповіді.)
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'),
),
],
);
}
}
Ви можете використовувати TextFormField
замість TextField
і використовувати initialValue
властивість. наприклад
TextFormField(initialValue: "I am smart")
Вам не потрібно визначати окрему змінну в області віджетів, просто зробіть це в рядку:
TextField(
controller: TextEditingController()..text = 'Your initial value',
onChanged: (text) => {},
)
Якщо ви використовуєте TextEditingController, тоді встановіть текст, як показано нижче
TextEditingController _controller = new TextEditingController();
_controller.text = 'your initial text';
final your_text_name = TextFormField(
autofocus: false,
controller: _controller,
decoration: InputDecoration(
hintText: 'Hint Value',
),
);
і якщо ви не використовуєте жодного TextEditingController, ви можете безпосередньо використовувати InitiValue, як показано нижче
final last_name = TextFormField(
autofocus: false,
initialValue: 'your initial text',
decoration: InputDecoration(
hintText: 'Last Name',
),
);
Для отримання додаткової довідки TextEditingController
text
властивості відповідно до документів TextEditingController.text
властивості. Якщо встановити це, сповістять усіх слухачів цього TextEditingController, що їм потрібно оновити (він викликає notifyListeners). З цієї причини це значення слід встановлювати лише між кадрами, наприклад, у відповідь на дії користувача, а не під час фаз збірки, компонування чи фарби. ( api.flutter.dev/flutter/widgets/TextEditingController/text.html )
Якщо ви хочете обробити декілька TextInput
s, як запитав @MRT в коментарі до прийнятої відповіді, ви можете створити функцію, яка приймає початкове значення і повертає TextEditingController
так:
initialValue(val) {
return TextEditingController(text: val);
}
Потім встановіть цю функцію як контролер для TextInput
та введіть там його початкове значення таким чином:
controller: initialValue('Some initial value here....')
Ви можете повторити це для інших TextInput
s.
Цього можна досягти, використовуючи TextEditingController
.
Щоб мати початкове значення, ви можете додати
TextEditingController _controller = TextEditingController(text: 'initial value');
або
Якщо ви використовуєте, у TextFormField
вас є initialValue
власність. Що в основному забезпечує це initialValue
контролеру автоматично.
TextEditingController _controller = TextEditingController();
TextFormField(
controller: _controller,
initialValue: 'initial value'
)
Для очищення тексту можна скористатися
_controller.clear()
методом.
всередині класу,
final usernameController = TextEditingController(text: 'bhanuka');
TextField,
child: new TextField(
controller: usernameController,
...
)
TextEdittingController _controller = new TextEdittingController(text: "your Text");
або
@override
void initState() {
super.initState();
_Controller.text = "Your Text";
}
Якщо ви не знайшли відповіді на це, а також для тих, хто приходить сюди, шукаючи відповідь: InputDecoration
Ознайомтеся з підказкою поля Попередній текст:
new TextField(
decoration: new InputDecoration(
hintText:"My Text String."
),
...