如何在颤动中制作圆形 TextField?

Posted

技术标签:

【中文标题】如何在颤动中制作圆形 TextField?【英文标题】:How can I make rounded TextField in flutter? 【发布时间】:2018-08-21 19:06:17 【问题描述】:

ios 的 Material Design 看起来不太好,尤其是 TextField。那么有什么方法可以创建自己的吗?或者有什么方法可以给 TextField 添加一些样式,让它看起来很圆?

【问题讨论】:

【参考方案1】:

您可以在 TextField 的装饰参数中添加圆角

TextField(
  decoration: InputDecoration(
      border: OutlineInputBorder(
        borderRadius: BorderRadius.circular(10.0),
      ),
      filled: true,
      hintStyle: TextStyle(color: Colors.grey[800]),
      hintText: "Type in your text",
      fillColor: Colors.white70),
)

【讨论】:

如果您只想为 Textfield 设置圆形边框,请使用 BorderRadius.circular( ) 而不是 BorderRadius.all( ) 有什么改变边框颜色的想法吗?【参考方案2】:

@Rockvole 的答案是正确的,但如果你不喜欢 TextField 周围的 默认边框,你可以通过覆盖 OutlineInputBorderborderSide 属性来实现它这个:

TextField(
    textAlign: TextAlign.center,
    controller: searchCtrl,
    keyboardType: TextInputType.text,
    decoration: InputDecoration(
        hintText: 'Enter a product name eg. pension',
        hintStyle: TextStyle(fontSize: 16),
        border: OutlineInputBorder(
            borderRadius: BorderRadius.circular(8),
            borderSide: BorderSide(
                width: 0, 
                style: BorderStyle.none,
            ),
        ),
        filled: true,
        contentPadding: EdgeInsets.all(16),
        fillColor: colorSearchBg,
    ),
),

【讨论】:

你也可以使用 Borderside.none【参考方案3】:

你可以在Container的帮助下得到想要的输出看看..

new Container(
  child: new Text (
      "Text with rounded edges.",
      style: new TextStyle(
          color: Colors.blue[500],
          fontWeight: FontWeight.w900
      )
  ),
  decoration: new BoxDecoration (
      borderRadius: new BorderRadius.all(new Radius.circular(10.0)),
      color: Colors.black
  ),
  padding: new EdgeInsets.fromLTRB(16.0, 16.0, 16.0, 16.0),
),

【讨论】:

为什么不只是new EdgeInsets.all(16.0)?干! 是的,这也可以。 @RandalSchwartz 问题是关于颤振中的圆形文本字段。填充是额外的东西。 使用 OutlineInputBorder 这是一个更好的解决方案,就像在其他答案中指出的那样。 我同意@siega。在文本字段上使用容器是一种矫枉过正。为此,您始终可以使用 OutlineInputBorder。虽然您可以使用容器,但当您希望为 textfiled 设置圆角填充颜色时。【参考方案4】:

您可以通过几种不同的方式达到目的:

第一种方法:

Container(
      child: new Text (
          "Some Text",
          style: TextStyle(
              color: Colors.black
          )
      ),
      decoration: BoxDecoration (
          borderRadius: BorderRadius.all( Radius.circular(15)),
          color: Colors.white
      ),
      padding: EdgeInsets.all(16.0),
    ),

第二种方法:

 TextField(
      decoration: InputDecoration(
          border: OutlineInputBorder(
            borderRadius: const BorderRadius.all(
              Radius.circular(15.0),
            ),
          ),
          filled: true,
          hintStyle: new TextStyle(color: Colors.grey[600]),
          hintText: "Hint text",
          fillColor: Colors.white),
    )

第三种方法:

TextField(
    textAlign: TextAlign.center,
    controller: someTextXontroller,
    keyboardType: TextInputType.text,
    decoration: InputDecoration(
        hintText: 'Hint Text',
        border: OutlineInputBorder(
            borderRadius: BorderRadius.circular(12),
            borderSide: BorderSide(
                width: 0, 
                style: BorderStyle.none,
            ),
        ),
        filled: true,
        contentPadding: EdgeInsets.all(16),
        fillColor: Colors.blue,
    ),
),

【讨论】:

很好,你的第三种方法是为我做的,但是制作了自定义的 BorderSide。谢谢!【参考方案5】:

你可以试试下面的代码:

      decoration:  InputDecoration(
         border: OutlineInputBorder(
             borderRadius: const BorderRadius.all(
                const Radius.circular(10.0), 
             ),
             borderSide: BorderSide(
              width: 0, 
              style: BorderStyle.none,
              ),
             ),
           )

【讨论】:

点评来源: Stack Overflow 上不鼓励仅使用代码的答案,因为它们没有解释它是如何解决问题的。请编辑您的答案以解释此代码的作用以及它如何回答问题,以便它对 OP 以及其他有类似问题的用户有用。见:How do I write a good answer?。谢谢【参考方案6】:

我从互联网上的几种方法和解决方案中收集了这个解决方案,它对我很有效,所以它可以帮助那里的人: 这个方案会控制TextField的宽高,以及其他属性

Container(
    child: Theme(
      data: Theme.of(context).copyWith(splashColor: Colors.transparent),
      child: TextField(
        autofocus: false,
        style: TextStyle(fontSize: 15.0, color: Color(0xFFbdc6cf)),
        decoration: InputDecoration(
          filled: true,
          fillColor: Colors.white,
          hintText: 'Search',
          contentPadding:
          const EdgeInsets.only(left: 14.0, bottom: 12.0, top: 0.0),


          focusedBorder: OutlineInputBorder(
            borderSide: BorderSide(color: Colors.white),
            borderRadius: BorderRadius.circular(25.7),
          ),

          enabledBorder: UnderlineInputBorder(
            borderSide: BorderSide(color: Colors.white),
            borderRadius: BorderRadius.circular(25.7),
          ),
        ),
      ),
    ),

    decoration: new BoxDecoration (
      borderRadius: new BorderRadius.all(new Radius.circular(30.0)),
      color: Colors.white   ),   width: 250,   height: 50,   margin: new EdgeInsets.fromLTRB(20, 20, 20, 210),   padding: new EdgeInsets.fromLTRB(8, 8, 8, 8),

),

【讨论】:

以上是关于如何在颤动中制作圆形 TextField?的主要内容,如果未能解决你的问题,请参考以下文章

当我在颤动中按下按钮时,如何将 Card 小部件替换为 TextField? [关闭]

如何在颤动中制作自定义按钮形状

如何更改文本字段颤动中的值?

如何减少颤动中Textfield的额外填充

在颤动中写长文本时如何制作段落?

如何在颤动中创建具有圆形边缘的自定义容器?