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

我该怎么做才能解决这个问题?有没有一种方法可以使弹出窗口的背景颜色更暗,或者使按钮内的值与项目的颜色不同?

最佳答案

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

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

关于flutter - 无法弄清楚如何正确设置DropdownButton的样式,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/60607785/

10-10 07:02