DropdownButton始终处于禁用状态

时间:2019-06-24 14:37:35

标签: flutter dart

我在TileList的尾部放置了一个DropdownButton,设置了文档中显示的参数以使其处于活动状态,但是无论如何它都保持禁用状态。

ListTile是ListView的一部分,未包含在下面的代码中。 我像声明的文档一样设置setState(),但无济于事。 我无法找到此问题的根本原因,不知道是什么原因造成的。

我尝试用int作为值的枚举,但是它也没有用。

...

final Store<AppState> store;
Units unit;

@override
void initState() {
   super.initState();
   unit = store.state.weatherState?.temperature?.unit;
}

...

enum Units {Celsius, Fahrenheit, Kelvin}

Widget _displayUnitsSettings({Store<AppState> store}) {
    return ListTile(
      dense: true,
      enabled: true,
      selected: true,
      title: Text(
        "Temperature Unit",
        style: TextStyle(
            decoration: TextDecoration.underline,
            decorationStyle: TextDecorationStyle.dotted,
            fontSize: 14,
            fontWeight: FontWeight.w700,
            color: Colors.white),
      ),
      subtitle: Text(
        "Default: Celsius.\nAvailable units: Celsius, Fahrenheit, Kelvin.",
        style: TextStyle(
            fontSize: 9, fontWeight: FontWeight.w700, color: Colors.white54),
      ),
      trailing: DropdownButton(
        style: TextStyle(
            fontSize: 14, fontWeight: FontWeight.w700, color: Colors.white54),
        isDense: true,
        value: unit,
        onChanged: (value) {
          store.dispatch(ChangeUnit(unit: value));
          setState(() {
            unit = value;
          });
        },
        items: <DropdownMenuItem>[
          DropdownMenuItem(
            value: Units.Celsius,
            child: Text("Celsius"),
          ),
          DropdownMenuItem(
            value: Units.Fahrenheit,
            child: Text("Fahrenheit"),
          ),
          DropdownMenuItem(
            value: Units.Kelvin,
            child: Text("Kelvin"),
          ),
        ],
      ),
    );
  }
...

编辑:“下拉按钮”似乎已启用,但我无法单击它。

1 个答案:

答案 0 :(得分:1)

这是问题所在。您有AppBar,在ListViewStack之后没有位置。这意味着AppBar与您的ListView重叠,因此拦截了您DropdownButton上的手势。

AppBar小部件包装Positioned,它将起作用。像这样:

  Positioned(
    top: 0.0,
    left: 0.0,
    right: 0.0,
    child: AppBar(
      leading: _backButton(context),
      backgroundColor: Colors.transparent,
      elevation: 0,
    ),
  ),