Chciałbym podać wartość początkową w polu tekstowym i ponownie narysować ją pustą wartością, aby wyczyścić tekst. Jakie jest najlepsze podejście do tego z interfejsami API Fluttera?
Odpowiedzi:
(Z listy mailingowej. Nie znalazłem tej odpowiedzi).
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'),
),
],
);
}
}
Możesz użyć TextFormField
zamiast TextField
i użyć initialValue
właściwości. na przykład
TextFormField(initialValue: "I am smart")
Nie musisz definiować osobnej zmiennej w zakresie widżetu, po prostu zrób to w tekście:
TextField(
controller: TextEditingController()..text = 'Your initial value',
onChanged: (text) => {},
)
Jeśli używasz TextEditingController, ustaw na niego tekst, jak poniżej
TextEditingController _controller = new TextEditingController();
_controller.text = 'your initial text';
final your_text_name = TextFormField(
autofocus: false,
controller: _controller,
decoration: InputDecoration(
hintText: 'Hint Value',
),
);
a jeśli nie używasz żadnego TextEditingController , możesz bezpośrednio użyć initialValue, jak poniżej
final last_name = TextFormField(
autofocus: false,
initialValue: 'your initial text',
decoration: InputDecoration(
hintText: 'Last Name',
),
);
Aby uzyskać więcej informacji, TextEditingController
text
właściwości zgodnie z dokumentami TextEditingController.text
właściwości: ustawienie tego spowoduje powiadomienie wszystkich słuchaczy tego TextEditingController, że muszą zaktualizować (wywołuje notifyListeners). Z tego powodu ta wartość powinna być ustawiana tylko między klatkami, np. W odpowiedzi na działania użytkownika, a nie w fazie budowania, układu lub malowania. ( api.flutter.dev/flutter/widgets/TextEditingController/text.html )
Można to osiągnąć za pomocą TextEditingController
.
Aby mieć wartość początkową, możesz dodać
TextEditingController _controller = TextEditingController(text: 'initial value');
lub
Jeśli używasz TextFormField
, masz tam initialValue
nieruchomość. Który zasadniczo zapewnia to initialValue
do kontrolera automatycznie.
TextEditingController _controller = TextEditingController();
TextFormField(
controller: _controller,
initialValue: 'initial value'
)
Aby usunąć tekst, możesz użyć
_controller.clear()
metody.
Jeśli chcesz obsłużyć wiele TextInput
s zgodnie z pytaniem @MRT w komentarzu do zaakceptowanej odpowiedzi, możesz utworzyć funkcję, która przyjmuje wartość początkową i zwraca TextEditingController
taką:
initialValue(val) {
return TextEditingController(text: val);
}
Następnie ustaw tę funkcję jako kontroler dla TextInput
i podaj tam jej wartość początkową w następujący sposób:
controller: initialValue('Some initial value here....')
Możesz to powtórzyć dla pozostałych TextInput
.
TextEdittingController _controller = new TextEdittingController(text: "your Text");
lub
@override
void initState() {
super.initState();
_Controller.text = "Your Text";
}
w klasie,
final usernameController = TextEditingController(text: 'bhanuka');
Pole tekstowe,
child: new TextField(
controller: usernameController,
...
)
Jeśli nie znalazłeś odpowiedzi na to i dla tych, którzy przyjeżdżają tutaj w poszukiwaniu odpowiedzi: InputDecoration
Sprawdź podpowiedź do pola Tekst:
new TextField(
decoration: new InputDecoration(
hintText:"My Text String."
),
...