Flutter:如何制作带有 HintText 但没有下划线的 TextField?

Flutter: how to make a TextField with HintText but no Underline?

这就是我想要做的:

在文本字段的 Flutter 文档中 (https://flutter.io/text-input/) 它说您可以通过将 null 传递给装饰来删除下划线。但是,这也摆脱了提示文本。

无论文本字段是否获得焦点,我都不想要任何下划线。

更新:更新了已接受的答案以反映截至 2020 年 4 月 Flutter SDK 的变化。

这样做:

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

或者如果您需要图标等其他内容,请使用 InputBorder.none

设置边框
InputDecoration(
    border: InputBorder.none,
    hintText: 'Username',
  ),
),

将焦点边框更改为none

TextField(
      decoration: new InputDecoration(
          border: InputBorder.none,
          focusedBorder: InputBorder.none,
          contentPadding: EdgeInsets.only(left: 15, bottom: 11, top: 11, right: 15),
          hintText: 'Subject'
      ),
    ),

这是一个补充答案,显示了一些更完整的代码:

  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 也有 filledfillColor 属性,但我无法让它们具有圆角半径,所以我使用了一个容器。

新的 flutter sdk,因为在集成 web 和桌面支持后,您需要像这样单独指定

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: "Hint here"),
  )

我发现没有其他答案给出边界半径,你可以简单地这样做,没有嵌套 Container

  TextField(
    decoration: InputDecoration(
      border: OutlineInputBorder(
        borderSide: BorderSide.none,
        borderRadius: BorderRadius.circular(20),
      ),
    ),
  );
decoration: InputDecoration(
 border:OutLineInputBorder(
 borderSide:BorderSide.none
 bordeRadius: BordeRadius.circular(20.0)
 )
)

您可以使用 TextFormField widget of Flutter Form 作为您的要求。

TextFormField(
     maxLines: 1,
     decoration: InputDecoration(
          prefixIcon: const Icon(
              Icons.search,
              color: Colors.grey,
          ),
      hintText: 'Search your trips',
      border: OutlineInputBorder(
         borderRadius: BorderRadius.all(Radius.circular(10.0)),
      ),
    ),
 ),

TextField 小部件有一个 属性 装饰,它有一个子 属性 border: InputBorder.none。这个 属性 将删除 Flutter 应用中的 TextField 文本输入底部下划线.因此,您可以将 TextField 的 decorationborder 属性 设置为 InputBorder.none,请参见此处的示例:

border: InputBorder.none:隐藏文本输入小部件的底部下划线。

 Container(
        width: 280,
        padding: EdgeInsets.all(8.0),
        child : TextField(
                autocorrect: true,
                decoration: InputDecoration(
                border: InputBorder.none,
                hintText: 'Enter Some Text Here')
            )
    )
            Container(
         height: 50,
          // margin: EdgeInsets.only(top: 20),
          decoration: BoxDecoration(
              color: Colors.tealAccent,
              borderRadius: BorderRadius.circular(32)),
          child: TextFormField(
            cursorColor: Colors.black,
            // keyboardType: TextInputType.,
            decoration: InputDecoration(
              hintStyle: TextStyle(fontSize: 17),
              hintText: 'Search your trips',
              suffixIcon: Icon(Icons.search),
              border: InputBorder.none,
              contentPadding: EdgeInsets.all(18),
            ),
          ),
        ),

TextField(style: TextStyle(color: Colors.black45,fontSize: 18,decorationThickness: 0.0))
decorationThickness:0.0显示时没有下划线。

为了制作无边框 TextFormField,我找到了以下解决方案:

没有使用容器。

TextFormField(
      decoration: InputDecoration(
          border: OutlineInputBorder(
                         borderRadius: BorderRadius.circular(15.0),
                         borderSide: BorderSide.none,
                            ),

           labelText: "Student email/id",
           floatingLabelStyle: const TextStyle(
                                    height: 4,
                                    color: Color.fromARGB(255, 160, 26, 179)),
                                
           filled: true,
           fillColor: Colors.grey[200],
           prefixIcon: const Icon(Icons.person),
                ),
           ),

正常采样:

输入错误时:

当用户输入时: