Флаттер: Как установить разные цвета для DropdownItems и для DropdownButton выбранного элемента? - PullRequest
1 голос
/ 30 октября 2019

Я включил DropdownButton в свой проект, но я застрял с этой проблемой.

Я пытался использовать тему, но это также меняет оба цвета. Я все еще могу изменить цвет фона выпадающего меню, но я хотел, чтобы он был белым с черным текстом.

Здесь вы можете видеть экраны , выпадающий белый, потому что цвет текста также белый

AccentColorOverride(
  child: Theme(
    data: ThemeData(
        hintColor: Colors.white,
        selectedRowColor: Colors.white),
    child: DropdownButton<String>(
      value: selectedRegion,
      hint: Text(hint_label_region, style: white18),
      isExpanded: true,
      underline: Container(
        height: 1.0,
        decoration: const BoxDecoration(
            border: Border(
                bottom: BorderSide(
                    color: Color(0xFFBDBDBD),
                    width: 2))),
      ),
      items: <String>[
        'A',
        'B',
        'C',
        'D'
      ].map<DropdownMenuItem<String>>((String value) {
        return DropdownMenuItem<String>(
          value: value,
          child: new Text(
            value,
            style: TextStyle(color: Colors.white),
          ),
        );
      }).toList(),
      onChanged: (String newValue) {
        setState(() {
          selectedRegion = newValue;
        });
      },
    ),
  ),
)

1 Ответ

0 голосов
/ 30 октября 2019

Я думаю, что это должно сработать, определить состояние, такое как _selectedItemValue, вызвать setState, когда пользователь нажимает на элемент, и отобразить свой DropDownMenuItem на основе этого состояния.

    .
    .
    .
    ].map<DropdownMenuItem<String>>((String value) {
            return GestureDetector(
              onTap: () {
                 setState() {
                   _selectedItemValue = value;
                 }
              } ,
              child:DropdownMenuItem<String>(
                value: value,
                child: Container(
                  color: value == _selectedItemValue ? Colors.blue : Colors.white,
                  child: new Text(
                    value,
                    style: TextStyle(color: Colors.white),
                ),),
            ),);
          }).toList(),
...