Bien que d'autres personnes aient déjà mentionné que le type de clavier "TextInputType.multiline" peut être utilisé, je voulais ajouter mon implémentation d'un TextField qui adapte automatiquement sa hauteur lorsqu'une nouvelle ligne est saisie, car on souhaite souvent imiter le comportement de saisie de WhatsApp et d'applications similaires.
J'analyse le nombre de \n Dans ce but, il est nécessaire d'insérer dans l'entrée des caractères de type '' à chaque fois que le texte est modifié. Cela semble exagéré, mais malheureusement, je n'ai pas trouvé de meilleure possibilité de réaliser ce béhavior dans Flutter jusqu'à présent et je n'ai pas remarqué de problèmes de performance, même sur les anciens smartphones.
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) { // use a maximum height of 6 rows
// height values can be adapted based on the font size
var newHeight = count == 0 ? 50.0 : 28.0 + (count * 18.0);
setState(() {
_inputHeight = newHeight;
});
}
}
// ... build method here
TextField(
controller: _textEditingController,
textInputAction: TextInputAction.newline,
keyboardType: TextInputType.multiline,
maxLines: null,
)