DropdownButton不会更改onChanged上的值

时间:2019-05-06 12:27:13

标签: dart flutter flutter-layout

从下拉列表中进行另一个选择后,DropdownButton不会更改下拉列表的值。下面是我的代码。

Flexible(
   child: Padding(
   padding: EdgeInsets.fromLTRB(0.0, 0.0, 10.0, 0.0),
   child: DropdownButton(
      hint: Text('Select'),
      items: list_dropdown,
      onChanged: (val) {
         setState(() {
           wd = val;                          
         });
      },
      value: wd,
   )),
)

在initState中,我设置值变量

 @override
 void initState() {
   // TODO: implement initState
   super.initState();

   wd = 0;
}

在全局范围内创建variale时

int wd;

我要去哪里错了?

1 个答案:

答案 0 :(得分:0)

为什么要在全局范围内创建变量?如果要使用wd来更改名为setState()的变量,则必须将其放入状态类。

class App extends StatefulWidget {
  @override
  _AppState createState() => _AppState();
}

class _AppState extends State<App> {
  // Here wd in my state class
  int wd = 0;
  @override
  Widget build(BuildContext context) {
    return Scaffold(
        appBar: AppBar(
          title: Text("Cat Attack"),
        ),
        body: Center(
          child: DropdownButton(
            value: wd,
            onChanged: (val) {
              setState(() {
                wd = val;
              });
            },
            items: [
              DropdownMenuItem(
                child: Text('1'),
                value: 1,
              ),
              DropdownMenuItem(
                child: Text('2'),
                value: 2,
              ),
            ],
          ),
        ));
  }
}

定义状态后,您可以在initState()中覆盖wd的值。

class _AppState extends State<App> {
  int wd;

  @override
  void initState() {
    super.initState();
    wd = 2;
  }

请记住,您的DropdownButton的“值”应设置为“空”或为值列表中的一个。因此,如果将其设置为5,而不是1、2或null(我的DropdownMenuItem中的值),则会出现此错误:

  

I / flutter(15227):══╡小组件库的异常提示UG ════════════════════════════   I / flutter(15227):构建App(dirty,state:_AppState#30354)时引发了以下断言:   I / flutter(15227):'package:flutter / src / material / dropdown.dart':失败的断言:560行pos 15:'item == null ||   I / flutter(15227):item.isEmpty ||值== null || items.where(((DropdownMenuItem item)=> item.value ==   I / flutter(15227):值)。长度== 1':不正确。