Sebbene altre persone abbiano già menzionato che è possibile utilizzare il tipo di tastiera "TextInputType.multiline", ho voluto aggiungere la mia implementazione di un TextField che adatta automaticamente la sua altezza quando viene inserita una nuova riga, poiché spesso si desidera imitare il comportamento di input di WhatsApp e app simili.
Sto analizzando il numero di caratteri "\ n" nell'input per questo scopo ogni volta che il testo viene modificato. Questo sembra essere eccessivo, ma sfortunatamente non ho trovato una possibilità migliore per raggiungere questo beahivour in Flutter finora e non ho notato problemi di prestazioni anche su smartphone più vecchi.
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
. Senza ciao non sembra funzionare