从 DropdownButtonFormField 中删除下划线

Posted

技术标签:

【中文标题】从 DropdownButtonFormField 中删除下划线【英文标题】:Remove underline from DropdownButtonFormField 【发布时间】:2018-12-03 06:50:17 【问题描述】:

如何(查看下面的照片),我尝试了各种选项组合,但 InputDecortaion 找不到任何方法。

SizedBox(
  width: 100.0,
  child: DropdownButtonFormField<int>(
    decoration: InputDecoration(
        border: UnderlineInputBorder(
            borderSide:
                BorderSide(color: Colors.white))),
    value: 2,
    items: <DropdownMenuItem<int>>[
      DropdownMenuItem<int>(
        value: 1,
        child: Text("Owner"),
      ),
      DropdownMenuItem<int>(
        value: 2,
        child: Text("Member"),
      ),
    ],
  ),

【问题讨论】:

代替边框使用enabledBorder 【参考方案1】:

只需像这样将 DropdownButton 包裹在 DropdownButtonHideUnderline 内:

new DropdownButtonHideUnderline(
 child: DropdownButton()
)

【讨论】:

这不适用于 DropDownButtonFormField 小部件 @KrishnaKumarJangid 再次阅读。它不适用于 DropdownButtonFormField 它适用于 DropdownButton。【参考方案2】:

underline 属性设置为SizedBox() 也会使其不可见:

...

DropdownButton(
  underline: SizedBox(),

...

【讨论】:

这仅适用于 DropDownButton,但不适用于 DropDownButtonFormField,就像问的问题一样。【参考方案3】:

一种方法:

在您的代码中 - 将 decoration: InputDecoration 更改为 decoration: InputDecoration.collapsed

body: SizedBox(
          width: 100.0,
          child: DropdownButtonFormField<int>(
            decoration: InputDecoration.collapsed(hintText: ''),
            value: 2,
            ...

在您的代码中 - 而不是 border 使用 enabledBorder: UnderlineInputBorder

DropdownButtonFormField<int>(
          decoration: InputDecoration(
              enabledBorder: UnderlineInputBorder(
                  borderSide: BorderSide(color: Colors.white))),
          value: 2,
          items: <DropdownMenuItem<int>>[
          ....

【讨论】:

DropdownButtonHideUnderline -> docs.flutter.io/flutter/material/… 在 DropdownButtonFormField 的情况下不起作用 DropdownButtonHideUnderline(child: DropdownButton() ) 又短又甜,试试这个 borderSide: BorderSide(color: Colors.white))), 中的Colors.white 更好,Colors.transparent 更好【参考方案4】:

现在正确/干净的解决方案是使用InputBorder.none:

DropdownButtonFormField<int>(
  decoration: InputDecoration(
    enabledBorder: InputBorder.none,
    ...
  ),
  ...
)

如果您想避免在所有情况下都显示边框,您可能还想将borderfocusedBordererrorBorderdisabledBorder 设置为InputBorder.none

【讨论】:

【参考方案5】:

underline 可以使用一个小部件,因此,您只需为其分配一个空 Container 或 SizedBox.shrink()

                  underline:Container(),
                         -- or --
                  underline:SizedBox.shrink(),

例子:

child: DropdownButton<String>(
                  // Just have to assign to a empty Container
                  underline:Container(),
                  value: dropdownValue,
                  icon: Icon(Icons.keyboard_arrow_down),
                  iconSize: 24,
                  elevation: 16,
                  onChanged: (String newValue) 
                    setState(() 
                      dropdownValue = newValue;
                    );
                  ,
                  items:[
                    deptList[0].dept,
                    deptList[1].dept,
                    deptList[2].dept,
                    deptList[3].dept,
                  ].map<DropdownMenuItem<String>>((String value) 
                    return DropdownMenuItem<String>(
                      value: value,
                      child: Text(value),
                    );
                  ).toList(),
                )

【讨论】:

underline:Container(),为DropDownButton工作,请回复DropdownbuttonFormField【参考方案6】:

underline: Container() 添加到您的设置中,如下所示:

SizedBox(
   ...
   underline: Container(),
),

【讨论】:

【参考方案7】:

根据这个 [Flutter Doc] 你可以这样做。只需创建一个 DropdownButtonHideUnderline 类的对象并将您当前的 DropdownButton 实现作为 DropdownButtonHideUnderline 的子级传递。就这样吧;)

DropdownButtonHideUnderline(
          child: new DropdownButton<String>(
            ......
          ),
        ),

【讨论】:

【参考方案8】:

您可以将下划线属性更改为空白或空小部件,它将像魅力检查以下属性一样工作

下划线:小部件或 SizedBox(),

例如:- 下拉按钮( 图标:图标(Icons.more_vert), isExpanded:真, 值:dropValue, 下划线:小部件或 SizedBox(),

【讨论】:

【参考方案9】:

目前,DropdownButtonFormField 不支持 DropdownButtonHideUnderline。

虽然它在后台使用它来删除 DropdownButton 的下划线,但随后在其上应用了自己的装饰

为 InputBorder.none 设置边框就可以了

DropdownButtonFormField<String>(
  decoration: InputDecoration(border: InputBorder.none)
)

如果您希望边框出现错误,您可以使用

InputDecoration(
  border: InputBorder.none,
  errorBorder: UnderlineInputBorder(
    borderSide: BorderSide(color: Colors.red),
  ),
),

【讨论】:

【参考方案10】:

使用

DropdownButton<String>(
                    hint: Text("Status"),
                    value: 'Text Default',
                    isExpanded: true,
                    iconSize: 30,
                    underline: Container(
                      height: 1.0,
                      decoration: const BoxDecoration(
                          border: Border(bottom: BorderSide(color: Colors.transparent, width: 0.0))
                      ),
                    ),
...

【讨论】:

【参考方案11】:
DropdownButtonHideUnderline(
                      child: DropdownButton(
                         isExpanded: true,
                      hint: Padding(
                        padding: const EdgeInsets.all(8.0),
                        child: Text("Select State"),
                      ),
                      style: MyStyle().getTextStyle("x1black"),
                      items: <String>[
                        'Messaging',
                        'Chating',
                        'No Longer Interested',
                        'Document Request'
                      ].map((String value) 
                        return new DropdownMenuItem<String>(
                          value: value,
                          child: new Text(value),
                        );
                      ).toList(),
                      onChanged: (_) ,
                      ),

                    ),

【讨论】:

欢迎来到 Stack Overflow。回答问题很好,但这个答案只是格式错误的代码,没有任何解释。该代码类似于其他答案中的代码。一个好的和有用的答案有一个解释,并提供了对该主题的新见解。【参考方案12】:

下划线需要一个小部件。传递一个空白小部件,如下所示。

DropdownButton<T>(
  value: value,
  underline: SizeBox(), // Empty box will remove underline
)

【讨论】:

【参考方案13】:

如果 DropdownButtonFormField 文本由于轮廓边框而被修剪,则使用以下代码:

DropdownButtonFormField<String>(
                              decoration: InputDecoration(
                                  enabledBorder: UnderlineInputBorder(
                                    borderSide: BorderSide(color: Colors.white)),
                                  isDense: true,)

【讨论】:

【参考方案14】:

简单的方法

DropdownButtonFormField<String>(
  decoration: InputDecoration(
    enabledBorder: UnderlineInputBorder(
    borderSide: BorderSide(color: Colors.transparent),
      ),
    ),
  ...
)

【讨论】:

【参考方案15】:
DropdownButtonFormField(
              iconSize: 30,
              decoration: InputDecoration(enabledBorder: InputBorder.none),
              hint: Text(
                "Select Duration",
                style: TextStyle(fontSize: 20),
              ),
              items: listDrop,
              onChanged: (value) 
                duration = value;
              ,
            )

【讨论】:

【参考方案16】:

如果你想在所有情况下都禁用边框,你可以使用:

 DropdownButtonFormField(
                validator: _validator,
                decoration: InputDecoration(
                    border: InputBorder.none,
                 ),
                items: [],
                onChanged: (value) ),
          ),

如果您只想在没有错误时禁用,您可以使用this

【讨论】:

【参考方案17】:

DropdownButtonHideUnderline( 孩子:按钮主题( 对齐下拉:假, 飞溅颜色:颜色.灰色, 孩子:下拉按钮( 值:_myPargna, 图标大小:25, 图标:图标(Icons.arrow_drop_down), 风格: 文本样式(字体大小:18,颜色:颜色(0xFF1f193d)), 提示:行( 孩子们: [ 大小框(宽度:11), 文本( '选择省份', 样式:TextStyle(颜色:Colors.grey), ), ], ), onChanged: (String newValue) 设置状态(() _myPargna = 新值; ); , 项目:items.map((字符串项目) 返回下拉菜单项( 孩子:行( 孩子们: [ 大小框(宽度:12), 文本( 项目, 样式:TextStyle(颜色:Colors.black), ), ], ), 价值:物品, ); ).toList(), ), ), ),

【讨论】:

以上是关于从 DropdownButtonFormField 中删除下划线的主要内容,如果未能解决你的问题,请参考以下文章

TextFormField 输入文本溢出与 DropdownButtonFormField, Flutter

如何防止导航器推送刷新屏幕

根据上一个 Flutter 的选择更改下拉按钮的选择

从 NIB 与从代码加载自定义滑块:从代码加载时不存在子视图

如何从其他面板从 JTextField 获取输入

从PRISM开始学WPFMVVMViewModel?