es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Cómo alinear verticalmente el texto dentro de un Campo de Texto (Formulario)

Intento alinear el texto dentro de mi TextFormField para que esté en el centro verticalmente.

TextFormField(
textAlignVertical: TextAlignVertical.center,
maxLines: 1,
style: const TextStyle(fontFamily: ‘Helvetica Neue’, fontWeight: FontWeight.w400, fontSize: 14),
decoration: InputDecoration(
contentPadding: const EdgeInsets.symmetric(horizontal: 20),
fillColor: Theme.of(context).canvasColor,
filled: true,
hintText: widget.hintText,
border: const OutlineInputBorder(
borderSide: BorderSide(color: Colors.grey),
),
focusedBorder: const OutlineInputBorder(
borderSide: BorderSide(color: Colors.black12, width: 0.5),
),
),
);

Intenté usar TextBaseline.alphabethic para TextStyle, contentPadding top y textAlignVertical para lograr eso, pero solo obtuve resultados extraños.

Por ejemplo, TextAlignVertical.top/.center da como resultado lo mismo que se muestra en la captura de pantalla, y TextAlignVertical.bottom termina quedando fuera del TextField. ContentPadding top y textBaseline no tienen ningún impacto.

¿Hay más opciones para probar?

Esto es lo que parece:

(Aquí hay una imagen: https://i.stack.imgur.com/ipJi8.jpg)

La posición del cursor parece perfecta, solo el texto no está bien.

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Una opción que puede probar es utilizar un widget personalizado para la propiedad “prefijo” o “sufijo” del campo de texto. Dentro del widget personalizado, puede utilizar un widget Align para centrar verticalmente el widget Text que contiene el texto del prefijo / sufijo. Aquí hay un ejemplo:

    TextFormField(
      textAlignVertical: TextAlignVertical.center,
      maxLines: 1,
      style: const TextStyle(fontFamily: 'Helvetica Neue', fontWeight: FontWeight.w400, fontSize: 14),
      decoration: InputDecoration(
        prefixIcon: CustomTextInputIcon(
          text: 'Texto Prefijo',
        ),
        contentPadding: const EdgeInsets.symmetric(horizontal: 20),
        fillColor: Theme.of(context).canvasColor,
        filled: true,
        hintText: widget.hintText,
        border: const OutlineInputBorder(
          borderSide: BorderSide(color: Colors.grey),
        ),
        focusedBorder: const OutlineInputBorder(
          borderSide: BorderSide(color: Colors.black12, width: 0.5),
        ),
      ),
    );
    
    // Widget personalizado para texto de prefijo / sufijo
    class CustomTextInputIcon extends StatelessWidget {
      final String text;
    
      const CustomTextInputIcon({Key? key, required this.text}) : super(key: key);
    
      @override
      Widget build(BuildContext context) {
        return SizedBox(
          width: 50, // ajustar según preferencia
          child: Align(
            alignment: Alignment.center,
            child: Text(
              text,
              textAlign: TextAlign.center,
              style: const TextStyle(
                fontFamily: 'Helvetica Neue',
                fontWeight: FontWeight.w400,
                fontSize: 14,
              ),
            ),
          ),
        );
      }
    }
    

    En este ejemplo, estamos utilizando la propiedad prefixIcon del widget InputDecoration para agregar un widget de prefijo personalizado. Puede ajustar el widget CustomTextInputIcon para que funcione con la propiedad suffixIcon también.

    Esta solución debería funcionar para centrar verticalmente el texto, siempre y cuando el texto de prefijo / sufijo no sea más alto que el campo de entrada en sí. Si el texto es más alto, es posible que deba ajustar la altura de SizedBox o utilizar un enfoque diferente por completo.

Comments are closed.