Come posso fornire un valore iniziale a un campo di testo?


144

Vorrei fornire un valore iniziale a un campo di testo e ridisegnarlo con un valore vuoto per cancellare il testo. Qual è l'approccio migliore per farlo con le API di Flutter?

Risposte:


105

(Dalla mailing list. Non ho trovato questa risposta.)

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'),
        ),
      ],
    );
  }
}

Immagino che i server dei suggerimenti abbiano lo stesso scopo.
dhuma1981,

3
Ti chiedi a quale mailing list hai fatto riferimento nella risposta?
stt106

2
E come possiamo aggiungere / sostituire il valore del campo di testo nel valore iniziale?
stuckedoverflow

2
Inoltre, assicurarsi di disporre _controller sull'eliminazione del widget. È raccomandato da Google. Assicura che le risorse vengano liberate quando non sono necessarie.
Amrit Pal Singh,

89

È possibile utilizzare un TextFormFieldanziché TextFielde utilizzare la initialValueproprietà per esempio

TextFormField(initialValue: "I am smart")

2
Per qualche motivo non potevo usarlo con un oggetto dinamico. Ho finito per aver bisogno del controller.
S1r-Lanzelot,

6
Questo è valido solo quando un controller non è specificato con TextFormField. docs.flutter.io/flutter/material/TextFormField/…
Alex Fallenstedt

@AlexFallenstedt non è necessario per questa proprietà quando il controller è disponibile
Sami Kanafani

Penso che sia rischioso perché quando si ricostruisce l'albero dei widget è possibile sostituire il testo con il valore iniziale.
Gökberk Yağcı,

47

Non è necessario definire una variabile separata nell'ambito del widget, basta farlo in linea:

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

Cosa si intende con i punti doppi in "TextEditingController () .. text"?
Ray Li,

3
@RayLi Si chiama operatore a cascata. Per info e l'esempio di controllo qui stackoverflow.com/questions/53136945/...
vovahost

1
Grazie!. Questo è perfetto per la creazione dinamica di widget da elenchi di oggetti :)
davaus

Questo è quello che stavo cercando !! Molte grazie!
TaeJung Shim,

1
Purtroppo a @vovahost manca la parte di smaltimento.
Chris Rutkowski

28

Se stai usando TextEditingController, imposta il testo su di esso, come di seguito

TextEditingController _controller = new TextEditingController();


_controller.text = 'your initial text';

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

e se non stai usando TextEditingController , puoi usare direttamente InitValue come di seguito

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

Per ulteriori riferimenti TextEditingController


Non sono sicuro che sia una buona idea impostare il valore iniziale sulla textproprietà come da documenti della TextEditingController.textproprietà: impostando questo notificherà a tutti gli ascoltatori di questo TextEditingController che devono aggiornare (chiama notificationListeners). Per questo motivo, questo valore deve essere impostato solo tra i frame, ad esempio in risposta alle azioni dell'utente, non durante le fasi di costruzione, layout o disegno. ( api.flutter.dev/flutter/widgets/TextEditingController/text.html )
Kirill Karmazin,

16

Ho visto molti modi per farlo qui. Comunque penso che questo sia un po 'più efficiente o almeno conciso rispetto alle altre risposte.

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

7

Se si desidera gestire più messaggi TextInputcome richiesto da @MRT nel commento alla risposta accettata, è possibile creare una funzione che accetta un valore iniziale e restituisce un valore TextEditingControllersimile al seguente:

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

Quindi, imposta questa funzione come controller per TextInpute fornisci il suo valore iniziale in questo modo:

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

Puoi ripetere questo per gli altri TextInput.


5

Questo può essere ottenuto utilizzando TextEditingController.

Per avere un valore iniziale è possibile aggiungere

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

o

Se stai usando TextFormFieldhai una initialValueproprietà lì. Che sostanzialmente fornisce automaticamente questo initialValueal controller.

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

Per cancellare il testo puoi usare il _controller.clear()metodo.


3

all'interno della classe,

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

Campo di testo,

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

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

o

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

-12

Se non hai trovato la risposta per questo e per coloro che vengono qui in cerca di una risposta: dai InputDecorationun'occhiata al suggerimento sul campo.

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

Il testo del suggerimento non è un valore iniziale. Quando l'utente digita qualcosa, sparirebbe. Il testo iniziale è come pre-scrivere qualcosa per l'utente.
Arman Ordookhani,

Questo è il testo Suggerimenti, Inizializzatore Not Value
MRT

2
È vero, ma va bene per coloro che arrivano qui alla ricerca di un suggerimento, ma non sanno come chiamarlo.
ThinkDigital
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.