Хоча інші люди вже згадували про те, що можна використовувати тип клавіатури "TextInputType.multiline", я хотів додати свою реалізацію TextField, яка автоматично адаптує свою висоту при введенні нового рядка, оскільки часто хочеться наслідувати поведінку введення WhatsApp та подібні програми.
Для цього я аналізую кількість символів "\ n" у вхідних даних при кожному зміні тексту. Це, здається, надмірне, але, на жаль, поки що я не знайшов кращої можливості досягти цього біхувуру у Flutter, і я не помітив жодних проблем із продуктивністю навіть на старих смартфонах.
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
. Без