Flutter: как создать текстовое поле с HintText, но без подчеркивания?

117

Вот что я пытаюсь сделать:

введите описание изображения здесь

В документации Flutter для текстовых полей ( https://flutter.io/text-input/ ) говорится, что вы можете удалить подчеркивание, перейдя nullк оформлению. Однако это также избавляет от текста подсказки.

Я не хочу подчеркивать, сфокусировано ли текстовое поле или нет.

ОБНОВЛЕНИЕ: обновлен принятый ответ, чтобы отразить изменения в Flutter SDK по состоянию на апрель 2020 года.

Чайный ПакетикСанта
источник

Ответы:

81

Ни один из приведенных выше ответов не будет работать для нового sdk flutter, поскольку после интеграции поддержки Интернета и рабочего стола вам необходимо указать индивидуально, как это

TextFormField(
    cursorColor: Colors.black,
    keyboardType: inputType,
    decoration: new InputDecoration(
        border: InputBorder.none,
        focusedBorder: InputBorder.none,
        enabledBorder: InputBorder.none,
        errorBorder: InputBorder.none,
        disabledBorder: InputBorder.none,
        contentPadding:
            EdgeInsets.only(left: 15, bottom: 11, top: 11, right: 15),
        hintText: sLabel),
  )
Сурав Пандит
источник
233

Делай это так:

TextField(
  decoration: new InputDecoration.collapsed(
    hintText: 'Username'
  ),
),

или если вам нужны другие вещи, например значок, установите границу с помощью InputBorder.none

InputDecoration(
    border: InputBorder.none,
    hintText: 'Username',
  ),
),
Сделано Баруна
источник
Можно ли это сделать без импорта materialпакета? т.е. по Cupertinoтеме?
kosiara - Bartosz Kosarzycki
Я бы хотел избежать: InputDecoration' can't be assigned to the parameter type 'BoxDecoration'ошибка типа
kosiara - Bartosz Kosarzycki
13

изменить выделенную границу на отсутствие

TextField(
      decoration: new InputDecoration(
          border: InputBorder.none,
          focusedBorder: InputBorder.none,
          contentPadding: EdgeInsets.only(left: 15, bottom: 11, top: 11, right: 15),
          hintText: 'Subject'
      ),
    ),
Сартак Сингхал
источник
12

Вот дополнительный ответ, который показывает более полный код:

введите описание изображения здесь

  Container(
    decoration: BoxDecoration(
      color: Colors.tealAccent,
      borderRadius:  BorderRadius.circular(32),
    ),
    child: TextField(
      decoration: InputDecoration(
        hintStyle: TextStyle(fontSize: 17),
        hintText: 'Search your trips',
        suffixIcon: Icon(Icons.search),
        border: InputBorder.none,
        contentPadding: EdgeInsets.all(20),
      ),
    ),
  ),

Ноты:

  • Темный фон (код не показан) есть Colors.teal.
  • InputDecorationтакже есть свойство filledand fillColor, но я не смог заставить их иметь угловой радиус, поэтому вместо этого я использовал контейнер.
Suragch
источник
4

Я не нашел другого ответа, который дает радиус границы, вы можете просто сделать это так, без вложенных Container

  TextField(
    decoration: InputDecoration(
      border: OutlineInputBorder(
        borderSide: BorderSide.none,
        borderRadius: BorderRadius.circular(20),
      ),
    ),
  );
Е. Вс
источник
-1

Я использовал TextFieldэлемент управления флаттером и получил вводимые пользователем данные, используя следующие методы.

onChanged:(value){
}
Сачин Мишра
источник
-2
decoration: InputDecoration(
 border:OutLineInputBorder(
 borderSide:BorderSide.none
 bordeRadius: BordeRadius.circular(20.0)
 )
)
С.Р. Кешав
источник
В чем разница между этим ответом и @E. Ответ Sun месяц назад?
Джереми Кейни,
Хотите чего-то новенького?
СР Кешав
2
Если ответ уже был предоставлен, нет необходимости отправлять его повторно. Это только добавляет шума будущим читателям, поскольку им нужно отсортировать несколько похожих ответов. В будущем, когда вы заработаете немного больше репутации, вы сможете голосовать за существующие ответы; это предпочтительный способ проверки подхода и подтверждения того, что решение работает.
Джереми Кейни,
1
Я хотел бы отметить , что, по случаю, вкладчики будут по- прежнему оставлять подобный совет , если у них есть другой способ объяснить это, или хотят добавить значительные более подробно. Совершенно нормально. Проблема здесь в том, что вы, кажется, даете тот же ответ, но с меньшими подробностями, поэтому он не вносит большого вклада в обсуждение.
Джереми Кейни,