我有一个小部件,稍后会在我的主脚手架文件中调用它。该小部件包含一个下拉菜单,但是选择其他值时无法更改状态。该字段未更新,并且出现错误消息“错误:未找到方法: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(),
),
我需要能够更新该值并在选择新值时显示它。
答案 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(),
);
}
}