Flutter aumenta la altura de TextFormField

5 minutos de lectura

Estoy creando una aplicación Flutter. Hice el diseño así.
ingrese la descripción de la imagen aquí

Mi campo de formulario TextFormField para alturas de correo electrónico y contraseña es pequeño. Quiero que sea del mismo tamaño que el botón.

final email = TextFormField(
    keyboardType: TextInputType.emailAddress,
    autofocus: false,
    initialValue: 'sathyabaman@gmail.com', 
    style: new TextStyle(fontWeight: FontWeight.normal, color: Colors.white),
    decoration: InputDecoration(
      hintText: 'Email', 
      contentPadding: EdgeInsets.fromLTRB(20.0, 10.0, 20.0, 10.0),
      border: OutlineInputBorder(
        borderRadius: BorderRadius.circular(32.0)
      ),
    ),
  );

¿Cuál es la sintaxis para la altura en el campo de formulario de texto?

  • puedes usar SizedBox propiedad para cambiar el ancho y la altura

    – Anbu Karthik

    25 de mayo de 2018 a las 6:52

  • Si desea agregar varias líneas, use maxLines: 5

    – ensueño_ss

    15 de enero de 2020 a las 12:59


Avatar de usuario de Ajay Kumar
ajay kumar

Simplemente ajuste el contentPadding en InputDecoration.

ingrese la descripción de la imagen aquí

final email = TextFormField(
    keyboardType: TextInputType.emailAddress,
    autofocus: false,
    initialValue: 'sathyabaman@gmail.com',
    style: new TextStyle(fontWeight: FontWeight.normal, color: Colors.white),
    decoration: InputDecoration(
      hintText: 'Email',
      contentPadding: const EdgeInsets.symmetric(vertical: 25.0, horizontal: 10.0),
      border: OutlineInputBorder(borderRadius: BorderRadius.circular(32.0)),
    ),
  );

  • Quiero disminuir su altura a una altura menor que la predeterminada, pero no funciona. ¿Por qué?

    – Sokheang Khun

    25 de diciembre de 2019 a las 9:40

  • ¿Cómo podemos hacer que el relleno de contenido esté en el centro en el campo de formulario de texto de entrada?

    – Umair

    8 de enero de 2020 a las 9:51

  • @Sokheang Khun utilizo valores negativos para disminuir el relleno, pero no estoy seguro de si esta es una forma práctica de hacerlo

    – Suri

    10 de junio de 2020 a las 4:59

  • @SokheangKhun, ¿ha encontrado alguna respuesta a esto?

    – Bijender Singh Shekhawat

    17 de marzo a las 12:23

Puede cambiar la altura cambiando el valor de minLines, solo intente esto

               TextFormField(
                           keyboardType: TextInputType.multiline,
                           controller: _opTextController,
                           decoration: InputDecoration(
                               isDense: true,
                             border: OutlineInputBorder(
                               borderSide: BorderSide(color: Colors.black)
                             )

                           ),
                           maxLines: 5,
                           minLines: 3,
                           // controller: cpfcontroller,
                         )

  • Tu respuesta no está clara. Proporcione una descripción para su código.

    – Momoro

    30 de abril de 2020 a las 21:23

  • Oye, @Momoro, puedes usar este código si no quieres pasar una altura estática a tu TextFormField si minLines es 1 y maxlines es 2, entonces se verá una sola línea TextFormField y su altura aumentará dinámicamente mientras el usuario escribe más palabras en el campo. Su altura se incrementará hasta 2 líneas porque maxLines = 2 si inicialmente desea mostrar un TextFormField más grande, luego aumente minLines. si todavía no está claro por favor hágamelo saber

    – naman kashyap

    21 de agosto de 2020 a las 14:57


ingrese la descripción de la imagen aquí

Utilice estas dos líneas para controlar TextFormField Altura interior InputDecoration .

isDense: true, 
contentPadding: EdgeInsets.fromLTRB(10, 10, 10, 0),

Ejemplo completo

Material(
                elevation: 4,
                shadowColor: Colors.blue,
                shape: RoundedRectangleBorder(borderRadius: BorderRadius.circular(10)),
                child: Padding(
                  padding: const EdgeInsets.only(left: 12),
                  child: TextFormField(
                    controller: searchProvider.searchController,
                    keyboardType: TextInputType.text,
                    decoration: InputDecoration(
                        hintText: 'hintText',
                        isDense: true, // important line
                        contentPadding: EdgeInsets.fromLTRB(10, 10, 10, 0),// control your hints text size
                        hintStyle: TextStyle(letterSpacing: 2, color: Colors.black54, fontWeight: FontWeight.bold),
                        fillColor:  Colors.white30 ,
                        filled: true,
                        border: OutlineInputBorder(borderRadius: BorderRadius.circular(30), borderSide: BorderSide.none)),
                  ),
                ),
              ),

  • alguien sabe que es isDense para

    – Diana

    16 de febrero de 2022 a las 14:47

  • isDence es si el [InputDecorator.child] es parte de una forma densa (es decir, usa menos espacio vertical). según la documentación de flutter

    –Ismael Mavor Raines

    30 de marzo a las 10:31

Avatar de usuario de Naj
Naj

Selecciona el expands atributo en TextFormField ser true entonces pon TextFormField en un SizedBox con un height

SizedBox(
   height: 40.0,
   child: TextFormField(
    keyboardType: TextInputType.emailAddress,
    autofocus: false,
    expands: true, // Setting this attribute to true does the trick
    initialValue: 'sathyabaman@gmail.com', 
    style: TextStyle(fontWeight: FontWeight.normal, color: Colors.white),
    decoration: InputDecoration(
      hintText: 'Email', 
      contentPadding: EdgeInsets.fromLTRB(20.0, 10.0, 20.0, 10.0),
      border: OutlineInputBorder(
        borderRadius: BorderRadius.circular(32.0)
      ),
    ),
  ),
)

Puede usar este código para personalizar su TextFormField

new SizedBox(
  width: 200.0,
  height: 300.0,
  child: const Card(child: const Text('Hello World!')),
)

  • El const Cart(...) debiera ser new TextFormField(...)¿bien?

    – Günter Zöchbauer

    25 de mayo de 2018 a las 6:54


  • Puedes reemplazar Card niño con tu TextFormField en lugar de Text('Hello World!'). Se muestra en respuesta.

    – himangi

    25 de mayo de 2018 a las 6:56

  • use double.infinity en el valor de ancho para obtener un ancho dinámico 🙂

    – shodiqul muzaki

    18/09/2018 a las 23:50

  • No funcionó, ¿Podemos darle altura a los campos de texto de otra manera?

    – Umair

    18 de mayo de 2020 a las 10:37

Existe otra alternativa a la adición de relleno extra permanente para cubrir el errorText – lo que probablemente estropearía el proyecto original de muchos diseñadores.

Podrías crear una versión modificada del fuentes TextFormField.

Para lograr precisamente eso, puede:

  1. Copie y pegue todo el contenido en el fuentes TextFormField.
  2. Renombra tu personalizado TextFormField solo para evitar conflictos de nombres con el original.
    • Probablemente también debería cambiar el nombre de la clase de estado interno.
    • En VS Code, puede usar Control + H para reemplazar TextFormField por decir, TextFormFieldWithErrorTextOption.
  3. Agregar otro parámetro a la TextFormFieldconstructor de (abajo esta línea), decir, errorTextPresent:
    // `true` is the current implicit default, i.e., showing the `errorText`
    bool errorTextPresent = true 
    
  4. Cambiar el inicialización de la decoración para el interior TextField:
    1. De:
      decoration: effectiveDecoration.copyWith(field.errorText)
      
    2. A:
      decoration: effectiveDecoration.copyWith(
          errorText: errorTextPresent ? field.errorText : null)
      
  5. Luego, puede usar su nuevo TextFormField de manera similar a cómo usa cualquier TextFormField:
    TextFormFieldWithErrorTextOption(
      errorTextPresent: false, // `false` will disable the `errorText`
      ...
    ),
    

  • El const Cart(...) debiera ser new TextFormField(...)¿bien?

    – Günter Zöchbauer

    25 de mayo de 2018 a las 6:54


  • Puedes reemplazar Card niño con tu TextFormField en lugar de Text('Hello World!'). Se muestra en respuesta.

    – himangi

    25 de mayo de 2018 a las 6:56

  • use double.infinity en el valor de ancho para obtener un ancho dinámico 🙂

    – shodiqul muzaki

    18/09/2018 a las 23:50

  • No funcionó, ¿Podemos darle altura a los campos de texto de otra manera?

    – Umair

    18 de mayo de 2020 a las 10:37

Avatar de usuario de CopsOnRoad
policíasencarretera

Captura de pantalla:

ingrese la descripción de la imagen aquí


Código:

Necesitas usar un SizedBox y TextField.maxLines propiedad.

@override
Widget build(BuildContext context) {
  final height = 100.0;
  return Scaffold(
    body: SizedBox( // <--- SizedBox
      height: height,
      child: TextField(
        cursorColor: Colors.red,
        maxLines: height ~/ 20,  // <--- maxLines
        decoration: InputDecoration(
          filled: true,
          hintText: 'Hint text',
          fillColor: Colors.grey,
        ),
      ),
    ),
  );
}

¿Ha sido útil esta solución?