Текстовое поле флаттера расширяется как пользовательские типы
У меня есть текстовое поле и вам нужно иметь несколько строк, как показано ниже, чтобы текст обертывался, однако он занимает пространство всех строк, которые определены в maxLines. Я хочу, чтобы он выглядел как 1 строка и расширялся по мере обтекания текста. Любые идеи о том, как это сделать, трепещут?
new TextField(
decoration: const InputDecoration(
hintText: 'Reply',
labelText: 'Reply:',
),
autofocus: false,
focusNode: _focusnode,
maxLines: 1,
controller: _newreplycontroller,
keyboardType: TextInputType.text,
),
Ответы
Ответ 1
Установите maxLines
на ноль, и он будет автоматически расти вертикально.
Это задокументировано (но не совсем ясно) здесь (правка: я создал PR, чтобы обновить это, что я должен был сделать для этого вопроса;). Чтобы выяснить это, я в итоге посмотрел код для TextField
и его суперкласс (ов), чтобы увидеть, как будет вести себя поведение, если установить в ноль.
Поэтому ваш код должен быть следующим:
new TextField(
decoration: const InputDecoration(
hintText: 'Reply',
labelText: 'Reply:',
),
autofocus: false,
focusNode: _focusnode,
maxLines: null,
controller: _newreplycontroller,
keyboardType: TextInputType.text,
),
Если вы пытаетесь сделать это автоматически по горизонтали, вы, вероятно, не должны - по крайней мере, не на основе текстового содержимого. Но я полагаю, что вы хотите, чтобы это происходило автоматически по вертикали.
Ответ 2
Установка на ноль работала так же, как установка на 1 (он растет горизонтально только на одну строку).
Я думаю, что вы должны установить minLines и maxLines.
Я использую minLines: 1 и maxLines: 2, и когда первая строка достигает конца, она расширяет другую строку. Когда вторая строка достигает конца, она прокручивает вторую до первой и создает третью строку. Так что вам придется установить maxLenght тоже.