Текстовое поле флаттера расширяется как пользовательские типы

У меня есть текстовое поле и вам нужно иметь несколько строк, как показано ниже, чтобы текст обертывался, однако он занимает пространство всех строк, которые определены в 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 тоже.