有没有办法自定义DropDownButtonFormField中DropDownMenuItem的颜色(Flutter Web)

问题描述 投票:0回答:1

我想更改所选DropDownMenuItem的backgroundColor以及这些菜单项的颜色,例如hove颜色,splash颜色,突出显示颜色。

我正在 flutter web 中开发它。

我尝试将 ButtonTheme 包装到 DropdownButtonFormField 并为所有可能的颜色属性指定颜色,没有任何更改。

我也尝试过主题没有改变。

这是最终代码

ButtonTheme(
            alignedDropdown: true,
            child: Theme(
              data: Theme.of(context).copyWith(
                  dropdownMenuTheme: const DropdownMenuThemeData(
                      menuStyle: MenuStyle(
                surfaceTintColor: WidgetStatePropertyAll(Colors.yellow),
                backgroundColor: WidgetStatePropertyAll(Colors.blue),
                shadowColor: WidgetStatePropertyAll(Colors.red),
              ))),
              child: DropdownButtonFormField(
                borderRadius: BorderRadius.circular(16),
                decoration: InputDecoration(
                  enabledBorder: OutlineInputBorder(
                    borderRadius: BorderRadius.circular(16),
                    borderSide: BorderSide.none,
                  ),
                  focusedBorder: OutlineInputBorder(
                    borderRadius: BorderRadius.circular(16),
                    borderSide: BorderSide.none,
                  ),
                  hintText: "Select export option",
                  hintStyle: context.typography.body.copyWith(
                    color: context.colors.onSurfaceVariant,
                  ),
                  fillColor: context.colors.surfaceContainer,
                  filled: true,
                  focusColor: context.colors.onPrimary,
                  hoverColor: context.colors.onPrimary,
                ),
                dropdownColor: context.colors.surfaceContainer,
                value: null,
                style: context.typography.body.copyWith(
                  color: context.colors.onSurface,
                ),
                items: const [
                  DropdownMenuItem(
                    value: "option",
                    child: Text("Select export option"),
                  ),
                  DropdownMenuItem(
                    value: "qr",
                    child: Text("Export only QR codes"),
                  ),
                  DropdownMenuItem(
                    value: "excel",
                    child: Text("Export products list"),
                  ),
                ],
                onChanged: (value) {},
              ),
            ),
          ),

输出

Output I got

我想更改所选颜色、悬停颜色、初始颜色和突出显示颜色

flutter flutter-ui
1个回答
0
投票

我正在使用 DropdownButtonFormField 在 Flutter 中设计一个下拉菜单。我的目标是为下拉菜单(DropdownMenuItem)中的每个项目自定义以下内容:

所选项目的背景颜色, 悬停在项目上时的悬停背景颜色, 交互过程中的飞溅和突出显示颜色。 但是,我无法使用 Theme 或 ButtonTheme 来实现此目的。我还尝试使用 MenuStyle 在 DropdownMenuThemeData 中定义某些属性,但它们似乎没有任何效果。

这是我当前正在使用的代码:

ButtonTheme(
  alignedDropdown: true,
  child: Theme(
    data: Theme.of(context).copyWith(
      dropdownMenuTheme: const DropdownMenuThemeData(
        menuStyle: MenuStyle(
          surfaceTintColor: WidgetStatePropertyAll(Colors.yellow),
          backgroundColor: WidgetStatePropertyAll(Colors.blue),
          shadowColor: WidgetStatePropertyAll(Colors.red),
        ),
      ),
    ),
    child: DropdownButtonFormField(
      borderRadius: BorderRadius.circular(16),
      decoration: InputDecoration(
        enabledBorder: OutlineInputBorder(
          borderRadius: BorderRadius.circular(16),
          borderSide: BorderSide.none,
        ),
        focusedBorder: OutlineInputBorder(
          borderRadius: BorderRadius.circular(16),
          borderSide: BorderSide.none,
        ),
        hintText: "Select export option",
        fillColor: Colors.grey[900],
        filled: true,
      ),
      dropdownColor: Colors.grey[800],
      value: null,
      items: const [
        DropdownMenuItem(
          value: "option",
          child: Text("Select export option"),
        ),
        DropdownMenuItem(
          value: "qr",
          child: Text("Export only QR codes"),
        ),
        DropdownMenuItem(
          value: "excel",
          child: Text("Export products list"),
        ),
      ],
      onChanged: (value) {},
    ),
  ),
),
© www.soinside.com 2019 - 2024. All rights reserved.