control & disable a dropdown button in flutter?

This isn't what you want to hear, but I don't think there's currently an easy way. I experimented with simply removing all the items and that causes a nice little crash. Maybe worth raising an issue with the flutter people on github...

There is an alternative that may be good enough for you for now. If you wrap your DropdownButton in an IgnorePointer, when you want it to be disabled you can change IgnorePointer's ignoring property to true.

That way if the user taps on it, it won't do anything.

But you'll probably want to indicate to the user somehow that it's disabled as well, something like setting the hint text (as it's grey).

      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) {},
        ),

Just wrap it with IgnorePointer widget to make DropdownButton disable

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;
            });
          },
        ),
);

You can make DropdownButtonFormField or DropdownButton disabled if set onChanged to null, and if you want that dropdown still shows selected value you must set disabledHint. For example:

     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(),
      )

Found this in the DropdownButton docs:

If items or onChanged is null, the button will be disabled, the down arrow will be grayed out, and the disabledHint will be shown (if provided)

DropdownButton(
  onChanged: null,
  items: [...],
)

Tags:

Flutter