在小部件

时间:2019-04-23 11:30:00

标签: drop-down-menu flutter dropdown setstate

我有一个小部件,稍后会在我的主脚手架文件中调用它。该小部件包含一个下拉菜单,但是选择其他值时无法更改状态。该字段未更新,并且出现错误消息“错误:未找到方法:setState”。                     setState((){'                     ^^^^^^^^^

我已经更新了setState方法并从中删除了代码,但仍然表示找不到该方法。

child: DropdownButton(
                  hint: Text('Medical'),
                  value: _selectedCustomerType,
                  onChanged: (newValue) {
                    setState(() {
                      _selectedCustomerType = newValue;
                    });
                  },
                  items: _customerType.map((cusType) {
                    print(cusType);

                    return DropdownMenuItem(
                      child: Text(cusType),
                      value: cusType,
                    );
                  }).toList(),
                ),

我需要能够更新该值并在选择新值时显示它。

2 个答案:

答案 0 :(得分:1)

SetState在main方法内部不可访问,在函数内部也无法访问,要使其可访问,您需要创建一个Stateful类,并且必须在State类中创建,因为实际上您的小部件是一个statefull类:它每次都会更改其状态。用户创建一个事件。

答案 1 :(得分:1)

您不能在StatefulWidget之外使用setState,因此应将DropdownButton包装在StatefulWidget中,例如:

class StatefulDropdownButton extends StatefulWidget {
  final List<String> _customerType;

  StatefulDropdownButton(this._customerType);

  @override
  State<StatefulWidget> createState() => DropdownButtonState();
}

class DropdownButtonState extends State<StatefulDropdownButton> {
  String _selectedCustomerType;

  @override
  Widget build(BuildContext context) {
    return DropdownButton(
      hint: Text('Medical'),
      value: _selectedCustomerType,
      onChanged: (newValue) {
        setState(() {
          _selectedCustomerType = newValue;
        });
      },
      items: widget._customerType.map((cusType) {
        print(cusType);

        return DropdownMenuItem(
          child: Text(cusType),
          value: cusType,
        );
      }).toList(),
    );
  }
}