在Flutter中,我试图将DropdownButton的图标(向下箭头图标)的颜色更改为白色。
我尝试在没有帮助的情况下使用style属性。文本颜色变为白色,但图标仍为默认的灰色。
DropdownButton(
style: TextStyle(color: Colors.white, decorationColor:
Colors.white),
items: this.items,
value: null,
hint: Text(SaveOptions[_saveOption], style: TextStyle(color:
Colors.white)),
onChanged: (selectedOption) {
setState(() {
_saveOption = selectedOption;
});
})
如何将箭头图标的颜色更改为白色?
答案 0 :(得分:4)
由于DropdownButton
从最近的Theme
获得颜色,因此您有两个选择。
第一个是通过更改应用程序主题的亮度。
另一种方法是用新的dropdown
用深色的Theme
包装brightness
按钮。
Theme(
data: Theme.of(context).copyWith(brightness: Brightness.dark),
child: DropdownButton(
style: TextStyle(color: Colors.white, decorationColor: Colors.white),
items: this.items,
value: null,
hint: Text(SaveOptions[_saveOption], style: TextStyle(color: Colors.white)),
onChanged: (selectedOption) {
setState(() {
_saveOption = selectedOption;
});
},
),
)
答案 1 :(得分:3)
这是一个小技巧,但是它可以使您完全控制下拉菜单的折叠方式,简而言之,make值:null,提示:null,iconsize:null,创建一个包含两个具有相同大小的容器的堆栈: 1显示折叠的下拉菜单,1显示手势“展开”。
class MyDropdownFilled extends StatefulWidget {
final List<String> dropDownValues;
const MyDropdownFilled({Key key, @required this.dropDownValues})
: super(key: key);
List<DropdownMenuItem<String>> getDropDownMenuItems() {
return dropDownValues
.map((itemString) =>
DropdownMenuItem(child: Text(itemString), value: itemString))
.toList();
}
@override
_MyDropdownFilledState createState() => _MyDropdownFilledState();
}
class _MyDropdownFilledState extends State<MyDropdownFilled> {
String _activeDropdown;
@override
initState() {
super.initState();
_activeDropdown = widget.dropDownValues[0];
}
@override
Widget build(BuildContext context) {
return Stack(
children: [
Container(
width: double.infinity,
padding: EdgeInsets.all(10.0),
decoration: BoxDecoration(
color: primaryColor.shade600,
borderRadius: BorderRadius.all(Radius.circular(2))),
child:
Row(mainAxisAlignment: MainAxisAlignment.spaceBetween, children: [
Text(_activeDropdown, style: Theme.of(context).textTheme.caption),
Icon(Icons.arrow_drop_down, size: 30, color: Colors.white),
]),
),
Container(
width: double.infinity,
padding: EdgeInsets.all(10.0),
decoration: BoxDecoration(
color: Colors.transparent,
borderRadius: BorderRadius.all(Radius.circular(2))),
child: DropdownButtonHideUnderline(
child: DropdownButton<String>(
value: null,
isDense: true,
iconSize: 0,
hint: null,
onChanged: (String newValue) {
setState(() {
_activeDropdown = newValue;
});
},
items: widget.dropDownValues.map((String value) {
return DropdownMenuItem(
value: value,
child: Text(value),
);
}).toList(),
)),
)
],
);
}
}
答案 2 :(得分:0)
当前,箭头颜色已硬编码为DropdownButton
:
Color get _downArrowColor {
// These colors are not defined in the Material Design spec.
if (_enabled) {
if (Theme.of(context).brightness == Brightness.light) {
return Colors.grey.shade700;
} else {
return Colors.white70;
}
} else {
if (Theme.of(context).brightness == Brightness.light) {
return Colors.grey.shade400;
} else {
return Colors.white10;
}
}
}
您可以创建自己的窗口小部件以自定义此属性。
答案 3 :(得分:0)
似乎Flutter应该有办法做到这一点,但我认为目前尚不可能。我要做的就是将“值”设置为null,将“ iconSize”设置为0,并根据所选内容动态生成“提示”。这样可以完全控制提示小部件。
DropdownButton<int>(
value: null,
iconSize: 0,
hint: Row(
children: <Widget>[
Text(_selected,
style: TextStyle(
color: Colors.white,
fontWeight: FontWeight.w700,
),
),
Padding(
padding: EdgeInsets.only(left: 5),
child: Icon(
FontAwesomeIcons.caretDown,
color: Colors.white,
size: 20,
),
),
],
),
items: dateRanges.map((Map<String, dynamic> value) {
return DropdownMenuItem<int>(
value: value['type'],
child: Text(
value['name'],
style: TextStyle(
color: Colors.grey[800],
fontWeight: FontWeight.w700,
),
),
);
}).toList(),
onChanged: (type) => _onDateRangeTypeChanged(type),
)
希望这会有所帮助。
答案 4 :(得分:0)
转到DropdownButton类 修改此代码
if (!DropdownButtonHideUnderline.at(context)) {
final double bottom = widget.isDense ? 0.0 : 8.0;
result = Stack(
children: <Widget>[
result,
Positioned(
left: 0.0,
right: 0.0,
bottom: bottom,
child: Container(
height: 1.0,
decoration: const BoxDecoration(
border: Border(bottom: BorderSide(color: Color(0xFFBDBDBD), width: 0.0))
),
),
),
],
);
}
对此
if (!DropdownButtonHideUnderline.at(context)) {
final double bottom = widget.isDense ? 0.0 : 8.0;
result = Stack(
children: <Widget>[
result,
Positioned(
left: 0.0,
right: 0.0,
bottom: bottom,
child: Container(
height: 1.0,
decoration: const BoxDecoration(
border: Border(bottom: BorderSide(color: Colors.red
(“您想要的任何颜色”)
, width: 0.0))
),
),
),
],
);
}
答案 5 :(得分:0)
您可以通过以下方式使用字段iconDisabledColor
和final myDropDownMenu = DropdownButton<String>(
iconEnabledColor: Colors.white,
iconDisabledColor: Colors.white,
value: myInitialValue,
// The rest of your code
);
:
firebase.auth().onAuthStateChanged()
答案 6 :(得分:0)
在您可以转到源代码并查看其使用了该主题颜色的情况下,将小部件围绕具有您要设置的值的新主题进行环绕。