Flutter: jak utworzyć pole tekstowe z podpowiedzią, ale bez podkreślenia?

117

Oto, co próbuję zrobić:

wprowadź opis obrazu tutaj

W dokumentach Flutter dla pól tekstowych ( https://flutter.io/text-input/ ) jest napisane, że możesz usunąć podkreślenie, przechodząc nulldo dekoracji. Jednak to również usuwa tekst podpowiedzi.

Nie chcę żadnego podkreślenia, czy pole tekstowe jest aktywne, czy nie.

AKTUALIZACJA: zaktualizowana zaakceptowana odpowiedź, aby odzwierciedlić zmiany w Flutter SDK od kwietnia 2020 r.

TeabaggingSanta
źródło

Odpowiedzi:

80

Żadna z powyższych odpowiedzi nie będzie działać dla nowego pakietu SDK flutter, ponieważ po integracji obsługi sieciowej i stacjonarnej należy określić indywidualnie w ten sposób

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),
  )
sourav pandit
źródło
233

Zrób to tak:

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

lub jeśli potrzebujesz innych rzeczy, takich jak ikona, ustaw obramowanie za pomocą InputBorder.none

InputDecoration(
    border: InputBorder.none,
    hintText: 'Username',
  ),
),
Wykonane Baruna
źródło
Czy można to zrobić bez importowania materialpaczki? czyli Cupertinotemat?
kosiara - Bartosz Kosarzycki
Chciałbym uniknąć: InputDecoration' can't be assigned to the parameter type 'BoxDecoration'błędu typu
kosiara - Bartosz Kosarzycki
13

zmień skoncentrowaną ramkę na brak

TextField(
      decoration: new InputDecoration(
          border: InputBorder.none,
          focusedBorder: InputBorder.none,
          contentPadding: EdgeInsets.only(left: 15, bottom: 11, top: 11, right: 15),
          hintText: 'Subject'
      ),
    ),
Sarthak Singhal
źródło
12

Oto dodatkowa odpowiedź, która pokazuje pełniejszy kod:

wprowadź opis obrazu tutaj

  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),
      ),
    ),
  ),

Uwagi:

  • Ciemne tło (kod nie pokazano) Colors.teal.
  • InputDecorationrównież ma właściwość filledand fillColor, ale nie mogłem sprawić, by miały promień narożnika, więc zamiast tego użyłem kontenera.
Suragch
źródło
3

Nie znalazłem innej odpowiedzi, która podaje promień obramowania, możesz to po prostu zrobić w ten sposób, bez zagnieżdżenia Container

  TextField(
    decoration: InputDecoration(
      border: OutlineInputBorder(
        borderSide: BorderSide.none,
        borderRadius: BorderRadius.circular(20),
      ),
    ),
  );
E. Sun
źródło
-1

Używałem TextFieldtrzepotanie control.I dostał wejście wpisane użytkownika przy użyciu poniżej metod.

onChanged:(value){
}
Sachin Mishra
źródło
-2
decoration: InputDecoration(
 border:OutLineInputBorder(
 borderSide:BorderSide.none
 bordeRadius: BordeRadius.circular(20.0)
 )
)
SR Keshav
źródło
Jaka jest różnica między tą odpowiedzią a @E. Odpowiedź Sun sprzed miesiąca?
Jeremy Caney
Chcesz czegoś nowego?
SR Keshav
2
Jeśli odpowiedź została już udzielona, ​​nie ma potrzeby ponownego jej przesyłania. Robi to tylko hałas dla przyszłych czytelników, ponieważ muszą posortować wiele podobnych odpowiedzi. W przyszłości, gdy zdobędziesz nieco większą reputację, będziesz mógł głosować za dotychczasowymi odpowiedziami; jest to preferowany sposób walidacji podejścia i potwierdzenia, że ​​rozwiązanie działa.
Jeremy Caney
1
Powinienem zauważyć, że czasami współautorzy nadal publikują podobną radę, jeśli mają inny sposób jej wyjaśnienia lub chcą dodać znacznie więcej szczegółów. To jest w porządku. Problem polega na tym, że wydaje się, że udzielasz tej samej odpowiedzi, ale z mniejszą ilością szczegółów, więc nie wnosi wiele do wątku.
Jeremy Caney