Aunque otras personas ya mencionaron que se puede usar el tipo de teclado "TextInputType.multiline", quería agregar mi implementación de un TextField que adapta automáticamente su altura cuando se ingresa una nueva línea, ya que a menudo se desea imitar el comportamiento de entrada de WhatsApp y aplicaciones similares.
Estoy analizando la cantidad de caracteres '\ n' en la entrada para este propósito cada vez que se cambia el texto. Esto parece ser una exageración, pero desafortunadamente no encontré una mejor posibilidad de lograr este beahivour en Flutter hasta ahora y no noté ningún problema de rendimiento incluso en teléfonos inteligentes más antiguos.
class _MyScreenState extends State<MyScreen> {
double _inputHeight = 50;
final TextEditingController _textEditingController = TextEditingController();
@override
void initState() {
super.initState();
_textEditingController.addListener(_checkInputHeight);
}
@override
void dispose() {
_textEditingController.dispose();
super.dispose();
}
void _checkInputHeight() async {
int count = _textEditingController.text.split('\n').length;
if (count == 0 && _inputHeight == 50.0) {
return;
}
if (count <= 5) {
var newHeight = count == 0 ? 50.0 : 28.0 + (count * 18.0);
setState(() {
_inputHeight = newHeight;
});
}
}
TextField(
controller: _textEditingController,
textInputAction: TextInputAction.newline,
keyboardType: TextInputType.multiline,
maxLines: null,
)
maxLines: null
. Sin hola no parece funcionar