307 votes

Comment fournir une valeur initiale à un champ de texte ?

J'aimerais fournir une valeur initiale à un champ de texte et le redessiner avec une valeur vide pour effacer le texte. Quelle est la meilleure approche pour faire cela avec les API de Flutter ?

212voto

Sami Kanafani Points 1530

Vous pouvez utiliser un TextFormField au lieu de TextField et utiliser le initialValue par exemple

TextFormField(initialValue: "I am smart")

6 votes

Pour une raison quelconque, je n'ai pas pu l'utiliser avec un objet dynamique. J'ai fini par avoir besoin du contrôleur.

11 votes

Ceci n'est valable que lorsqu'un contrôleur n'est pas spécifié avec un TextFormField. docs.flutter.io/flutter/material/TextFormField/

3 votes

@AlexFallenstedt il n'y a pas besoin de cette propriété lorsque le contrôleur est disponible.

194voto

Seth Ladd Points 13589

(D'après la liste de diffusion, ce n'est pas moi qui ai trouvé cette réponse).

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

0 votes

Je suppose que les indices servent le même but.

5 votes

Je me demande juste à quelle liste de diffusion vous avez fait référence dans la réponse ?

2 votes

Et comment ajouter / remplacer la valeur du champ de texte par la valeur initiale ?

45voto

Nirav Bhavsar Points 852

Si vous utilisez TextEditingController puis définissez-y le texte, comme ci-dessous

TextEditingController _controller = new TextEditingController();

_controller.text = 'your initial text';

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

et si vous n'utilisez pas de TextEditingController vous pouvez alors utiliser directement valeur initiale comme ci-dessous

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

Pour plus de références TextEditingController

0 votes

Je ne suis pas sûr que ce soit une bonne idée de définir la valeur initiale de l'option text propriété selon les documents de TextEditingController.text propriété : Si vous définissez cette propriété, tous les auditeurs de ce TextEditingController seront informés qu'ils doivent être mis à jour (il appelle notifyListeners). Pour cette raison, cette valeur ne doit être définie qu'entre les images, par exemple en réponse aux actions de l'utilisateur, et non pendant les phases de construction, de mise en page ou de peinture. ( api.flutter.dev/flutter/widgets/TextEditingController/text.html )

13voto

Muaad Points 91

Si vous voulez gérer plusieurs TextInput comme le demande @MRT dans le commentaire de la réponse acceptée, vous pouvez créer une fonction qui prend une valeur initiale et renvoie un TextEditingController comme ça :

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

Ensuite, définissez cette fonction en tant que contrôleur de la fonction TextInput et fournir sa valeur initiale comme ceci :

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

Vous pouvez répéter ceci pour les autres TextInput s.

0 votes

controller: searchFieldController..text = viewModel.searchKeyword.value, :)

0 votes

Peut être utilisé avec TextField aussi.

4voto

BloodLoss Points 542

à l'intérieur de la classe,

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

Champ de texte,

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

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X