控制与禁用flutter中的下拉按钮?

时间:2018-04-06 12:45:04

标签: flutter

我想控制一个下拉按钮并使用按钮使其无法点击。

有没有办法让它禁用。基本上不允许它改变。

new DropdownButton(
          value: animalName,
          items: animals.map(
            (String value) {
              return new DropdownMenuItem<String>(
                value: value,
                child: new Text('$value'),
              );
            },
          ).toList(),
          onChanged: (value) {
            setState(() {
              animalName = value;
            });
          },
        ),

所以这是我目前在下拉按钮上使用的代码,但我无法禁用它。

7 个答案:

答案 0 :(得分:7)

在DropdownButton文档中找到了此内容

  

如果items或onChanged为null,则该按钮将被禁用,向下箭头将变灰,并且将显示DisabledHint(如果提供)

答案 1 :(得分:7)

如果将DropdownButtonFormField设置为null,则可以禁用DropdownButtononChanged,并且如果希望该下拉列表仍显示所选值,则必须设置disabledHint。例如:

     DropdownButtonFormField<String>(
        disabledHint: Text(_selectedItem),
        value: _selectedItem,
        onChanged: enabled ? (value) => setState(() => _selectedItem = value) : null,
        items: items.map<DropdownMenuItem<String>>((item) {
          return DropdownMenuItem(
            value: item,
            child: Text(item),
          );
        }).toList(),
      )

答案 2 :(得分:4)

这是简单的答案。

您可以使用 IgnorePointer 小部件将其包装,以使 DropdownButton 禁用

IgnorePointer(
      ignoring:  enabled,
      child: new DropdownButton(
          value: animalName,
          items: animals.map(
            (String value) {
              return new DropdownMenuItem<String>(
                value: value,
                child: new Text('$value'),
              );
            },
          ).toList(),
          onChanged: (value) {
            setState(() {
              animalName = value;
            });
          },
        ),
);

答案 3 :(得分:2)

这不是你想听到的,但我认为目前这不是一个简单的方法。我尝试简单地删除所有项目,这会导致一个不错的小崩溃。也许值得在github上向人们提出问题......

现在有一种替代方案可能对您有好处。如果将DropdownButton包装在IgnorePointer中,当您希望将其禁用时,可以将IgnorePointer的ignoring属性更改为true。

这样,如果用户点击它,它就不会做任何事情。

但是您可能想以某种方式向用户表明它已被禁用,例如设置提示文字(因为它是灰色的)。

      child: new IgnorePointer(
        ignoring: true,
        child: new DropdownButton(
          hint: new Text("disabled"),
            items: ["asdf", "wehee", "asdf2", "qwer"].map(
              (String value) {
                return new DropdownMenuItem<String>(
                  value: value,
                  child: new Text('$value'),
                );
              },
            ).toList(),
          onChanged: (value) {},
        ),

答案 4 :(得分:1)

好的,我发现了一个让我满意的窍门 我希望它根据DropdownButton

隐藏/显示CheckboxListTileStatefulWidget类中的

首先创建一个函数ex:

  _buildDropDown(bool enable) {
    if (enable) {
      return DropdownButton<String>(
        hint: Text("Hint"),
        items: <String>[
          'item 1',
          'item 2',
          'item 3',
        ].map((String value) {
          return new DropdownMenuItem<String>(
            value: value,
            child: new Text(value),
          );
        }).toList(),
        onChanged: (value) {},
      );
    } else { // Just Divider with zero Height xD
      return Divider(color: Colors.white, height: 0.0);
    }
  }

现在正在构建

bool enable = true;

@override
Widget build(BuildContext context) {
  return Column(
    children: <Widget>[
      CheckboxListTile(
        title: const Text('Switcher'),
        selected: true,
        value: enable,
        onChanged: (bool value) {
          setState(() {
            enable = value;
          });
        },
      ),
      _buildDropDown(enable),
    ],
  );
}

现在每次更改启用都会显示和隐藏DropdownButton

答案 5 :(得分:1)

  

如果items或onChanged为null,则该按钮将被禁用,向下   箭头将显示为灰色,并显示disabledHint(如果   提供)

所以这样的事情应该起作用:

DropdownButton<String>(
  ...
  onChanged: this.enabled ? (id) => setState(() => this.id = id) : null,
)

答案 6 :(得分:1)

DropdownButtonFormField(
     onChange: isDisable ? null : (str){
        
     },
     disabledHint: isDisable ?  null : Text('Your hint text'),
     ...
)

禁用 onChange:空

用于禁用字幕 d isabledHint:文本(“您的提示文本”)