繁体   English   中英

DropdownButton不会更改onChanged上的值

[英]DropdownButton is not changing the value on onChanged

在从下拉列表中进行另一次选择后,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中我设置了value变量

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

   wd = 0;
}

而我在全球范围内创建变量

int wd;

我哪里错了?

为什么要在全局范围内创建变量? 如果你想用setState()改变名为wd的变量,你必须把它放在你的状态类中。

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的“值”应设置为“null”,或者是值列表中的值。 因此,如果您将其设置为5,而不是1,2或null,这是我的DropdownMenuItem中的值,您将收到此错误:

I / flutter(15227):══╡WIDGETS LIBRARY的例外情况╞═​​══════════════════════════════════════════════════════════════════════════════════════════════════ ═══════════════════════════════════════════════════════════════════════════════════════════════════════════════════════>> / flutter(15227):'package:flutter / src / material / dropdown.dart':断言失败:第560行pos 15:'items == null || I / flutter(15227):items.isEmpty || value == null || items.where((DropdownMenuItem item)=> item.value == I / flutter(15227):value)。length == 1':不是真的。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM