无法弄清楚如何正确设置 DropdownButton 的样式

Posted

技术标签:

【中文标题】无法弄清楚如何正确设置 DropdownButton 的样式【英文标题】:Can't figure out how to properly style DropdownButton 【发布时间】:2020-06-21 18:28:31 【问题描述】:

我是 Flutter 的新手,我正在为一个大学项目构建一个应用程序,但我遇到了这个小部件的问题。

DropdownButton input value in white color

DropdownButton input value in black color

这是我的 DropdownButton 代码,它显示为白色的提示,但是当我选择一个项目时,按钮中的值显示为黑色。如果我将 DropdownButton 颜色更改为白色,那么当弹出窗口出现时,背景颜色为白色,字体颜色也为白色。这样我就看不到这些项目,因为它们与背景颜色相同。

class DropdownWidget extends StatelessWidget 
  final IconData icon;
  final IconData arrowIcon;
  final String hint;
  final List items;
  final Stream stream;
  final Function onChanged;

  DropdownWidget(this.icon, this.arrowIcon, this.hint, this.items, this.stream, this.onChanged);

  @override
  Widget build(BuildContext context) 
    return StreamBuilder(
      stream: stream,
      builder: (context, snapshot) 
        print("Snapshot data -> $snapshot.data");
        return InputDecorator(
          child: DropdownButton(
            icon: Icon( arrowIcon, color: Colors.white,),
            hint: Text( hint, style: TextStyle(color: Colors.white),),
            items: items.map((value) 
              print("Valor do item $value");
              return DropdownMenuItem(
                value: value,
                child: Text(value.runtimeType == int ? value.toString() : value, style: TextStyle(color: Colors.black),),
              );
            ).toList(),
            onChanged: onChanged,
            value: snapshot.data,
            isExpanded: true,
            style: TextStyle(
//              color: Colors.black,
              color: Theme.of(context).textSelectionColor,
              fontSize: 18.0,
            ),
            underline: Container(),
            isDense: true,
          ),
          decoration: InputDecoration(
            icon: icon == null ? null : Icon(icon, color: Colors.white,),
            hintText: hint,
            hintStyle: TextStyle(color: Colors.white),
            focusedBorder: UnderlineInputBorder(
              borderSide: BorderSide(color: Theme.of(context).primaryColor)
            ),
            contentPadding: EdgeInsets.only(
              left: 5,
              right: 0,
              bottom: 24,
              top: 30
            ),
            errorText: snapshot.hasError ? snapshot.error : null,
          ),
        );
      
    );
  

我能做些什么来解决这个问题?有没有办法使弹出窗口的背景颜色更深,或者只是按钮内的值与项目颜色不同?

【问题讨论】:

【参考方案1】:

您必须将 DropDownButton 包装在主题中。示例代码:

Theme(
    data: ThemeData(canvasColor: Colors.black), //this is where the magic happens
    child: DropdownButton<String>(
      value: dropDownValue,
      onChanged: (String newValue) 
        setState(() 
          dropDownValue = newValue;
        );
      ,

【讨论】:

如果这解决了您的问题,请将其标记为可能对同样问题有疑问的其他人的答案!

以上是关于无法弄清楚如何正确设置 DropdownButton 的样式的主要内容,如果未能解决你的问题,请参考以下文章

无法弄清楚如何正确存储命令行参数[关闭]

无法弄清楚如何正确使用 KeyboardAvoidingView

无法弄清楚如何使用 CLPlacemark 将我当前的位置正确嵌入到消息正文中

无法弄清楚如何让 CMake 为自定义 clang 驱动程序提取正确的标头

无法弄清楚为啥我的提交按钮不会提交

我正在尝试设置一些不同的多维数组,但无法弄清楚为啥这不起作用