300 votes

Champ de texte multiligne dans flutter

Cela peut sembler facile mais comment faire un champ de texte éditable de plusieurs lignes dans Flutter ? TextField ne fonctionne qu'avec une seule ligne.

Edit : quelques précisions car il semble que ce ne soit pas clair. Bien que vous puissiez définir le multiline pour envelopper virtuellement le contenu du texte, ce n'est toujours pas un multiline. Il s'agit d'une ligne unique affichée en plusieurs lignes. Si vous voulez faire quelque chose comme ça, vous ne pouvez pas. Parce que vous n'avez pas accès à ENTER bouton. Et pas de bouton d'entrée signifie pas de ligne multiple.

20voto

Thomas Hesse Points 747

Bien que cette question soit assez ancienne, il n'y a pas de réponse détaillée qui explique comment redimensionner dynamiquement l'écran de l'ordinateur. TextField avec peu d'efforts de la part des développeurs. Ceci est particulièrement important lorsque le TextField est soit placé dans un flexbox tel que ListView, SingleChildScrollView, etc. (le flexbox ne sera pas en mesure de déterminer la taille intrinsèque d'un élément extensible TextField ).

Comme suggéré par de nombreux autres utilisateurs, construisez votre TextField comme ça :

TextField(
  textInputAction: TextInputAction.newline,
  keyboardType: TextInputType.multiline,
  minLines: null,
  maxLines: null,  // If this is null, there is no limit to the number of lines, and the text container will start with enough vertical space for one line and automatically grow to accommodate additional lines as they are entered.
  expands: true,  // If set to true and wrapped in a parent widget like [Expanded] or [SizedBox], the input will expand to fill the parent.
)

Comment faire face à la hauteur intrinsèque manquante de la TextField ?

Enveloppez le TextField dans un IntrinsicHeight classe pour fournir la hauteur intrinsèque calculée dynamiquement de l'objet extensible. TextField à son parent (lorsque cela est demandé via, par exemple, le flexbox).

1 votes

TextInputAction : TextInputAction.newline, - c'est ce que je cherchais, cela permet de saisir une nouvelle ligne, merci.

18voto

Omar Alshyokh Points 121
   TextFormField(
                  minLines: 2,
                  maxLines: 5,
                  keyboardType: TextInputType.multiline,
                  decoration: InputDecoration(
                    hintText: 'description',
                    hintStyle: TextStyle(
                      color: Colors.grey
                    ),
                    border: OutlineInputBorder(
                      borderRadius: BorderRadius.all(Radius.circular(20.0)),
                    ),
                  ),
                ),

8voto

Utiliser ce

TextFormField(
      keyboardType: TextInputType.multiline,
      maxLines: //Number_of_lines(int),)

6voto

Bibin Baby Points 19

Utilisez le widget Expanded pour les impressions dynamiques

Expanded( enfant : TextField( type de clavier : TextInputType.multiline, minLines : 1, maxLines : 3, ), )

6voto

German Saprykin Points 1827

TextField a maxLines propriété.

enter image description here

2 votes

Je le sais. Bien que le contenu soit enveloppé, vous ne pouvez toujours pas appuyer sur la touche Entrée pour créer manuellement une nouvelle ligne. Du moins sur Android, car vous n'avez pas accès au bouton d'entrée.

0 votes

Ah, j'ai raté ce problème. J'ai vu un problème similaire datant de 2016, donc j'ai supposé qu'il était résolu. Assez triste que nous ne puissions toujours pas le faire.

2 votes

Il semble que ce problème soit maintenant résolu ( github.com/flutter/flutter/issues/8028 ). J'ai essayé le mode multi-ligne sur iOS et Android et les deux peuvent maintenant créer de nouvelles lignes dans le champ de texte.

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