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

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

【问题讨论】:

    标签: flutter


    【解决方案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),
    
    ),
    

    【讨论】:

      猜你喜欢
      • 2021-09-19
      • 2021-07-04
      • 2023-04-10
      • 2020-08-22
      • 1970-01-01
      • 2021-11-17
      • 2019-04-08
      • 2021-01-05
      • 1970-01-01
      相关资源
      最近更新 更多