Flutter Widget 之DropdownButton

1,085 阅读1分钟

你需要用户从选项列表中选择一个值吗?试试DropdownButton

ezgif.com-gif-maker (1).gif

首先,给DropdownMenuItems一个选项列表

DropdownButton(
    items: const [
        DropdownMenuItem(child: Text("Dash"), value: "Dash"),
        DropdownMenuItem(child: Text("Sparky"), value: "Sparky"),
        DropdownMenuItem(child: Text("Snoo"), value: "Snoo"),
        DropdownMenuItem(child: Text("Cloppy"), value: "Clippy"),
    ],
)

image.png

DropdownMenuItems是你将在下拉菜单中实际看到的内容,由于他们都在一个列表中,它们必须是同一种类型

DropdownMenuItem<String>(value: "Dash")
DropdownMenuItem<int>(value: 123)
DropdownMenuItem<double>(value: 1.0)

提供一个包含所选下拉菜单value的状态变量

DropdownButton(
    items: [...],
    value: _dropdownValue,
)

最后,给它一个onChanged回调,在选择新值时调用setState来更新变量

void dropdownCallback(String? selectedValue) {
    if (selectedValue is String) {
        setState(() {
            _dropdownValue = selectedValue;
        });
    }
}

DropdownButton(
    items: [...],
    value: _dropdownValue,
    onChanged: dropdownCallback,
)

image.png 以上的技术内容已足够你使用,另外,你也可以根据自己的喜好自定义下拉按钮

那个箭头是不是太小了?你可以通过调整图标大小将它变大

DropdownButton(
    items: [...],
    value: _dropdownValue,
    onChanged: dropdownCallback,
    iconSize: 42.0
)

image.png

默认的灰色不够突出?你可以通过iconEnabledColor给它上一点颜色

DropdownButton(
    items: [...],
    vale: _dropdownValue,
    onChanged: dropdownCallback,
    iconEnabledColor: Colors.green,
)

image.png

不喜欢箭头?用不同的图标替换它

DropdownButton(
    items: [...],
    value: _dropdownValue,
    onChanged: dropdownCallback,
    icon: const Icon(Icons.flutter_dash),
)

image.png

通过启用IsExpanded扩大下拉框的宽度

DropdownButton(
    items: [...],
    value: _dropdownValue,
    onChanged: dropdownCallback,
    isExpanded: true,
)

image.png

你甚至可以通过style给文本上色

DropdownButton(
    items: [...],
    value: _dropdownValue,
    onChanged: dropdownCallback,
    style: GooleFont.patuaOne(
        testStyle: const TextStyle(
            color: Colors.blue
        ),
    ),
)

image.png

记住一件事:如果onChanged或items列表为null,DropdownButton将不可用,箭头会变灰色且不会响应输入

DropdownButton(
    items: null,
    value: _dropdownValuem
    onChanged: null,
)

image.png

如果想了解有关DropdownButton的内容,或者关于Flutter的其他功能,请访问flutter.dev

原文翻译自视频:视频地址