我创建了一个DropdownButton作为StatefulWidget.该类称为MyDropDown,具有名为MyDropDownState的相应状态.
我在MyDropDownState类中创建了一个reset函数:
void reset(){
setState((){
_selection = null;
});
}
Run Code Online (Sandbox Code Playgroud)
这会将选择设置为null并设置下拉列表的状态,从而有效地重置下拉列表.
问题的核心是当按下AppBar上的IconButton时我必须调用此函数.我尝试了多种方法,只是无法访问我创建的MyDropDown类的状态.
这是MyDropDown的代码,它的状态,简化:
class MyDropDown extends StatefulWidget {
final Map<String, String> _itemMap;
MyDropDown(this._itemMap);
@override
MyDropDownState createState() => new MyDropDownState();
}
class MyDropDownState extends State<MyDropDown> {
String _selection;
void reset(){
setState((){
_selection = null;
});
}
@override
void initState() {
_selection = null;
super.initState();
}
@override
Widget build(BuildContext context) {
return new DropdownButton(
value: _selection,
//getDropItems builds dropdown items
items: getDropItems(widget._itemMap),
onChanged: (s) {
setState(() {
_selection = s;
});
},
);
}
}
Run Code Online (Sandbox Code Playgroud)
在我的主页面中,我创建了一个新的MyDropDown
final MyDropDown cityDropdown = new MyDropDown(cityLookup);
Run Code Online (Sandbox Code Playgroud)
然后这是AppBar(在一个脚手架内),它持有我要按下的IconButton以重置Dropdown.
appBar : new AppBar(
title: new Text('Filter Jobs'),
actions: <Widget>[
new IconButton(
icon: new Icon(Icons.refresh),
onPressed: () {
print('Reset dropdowns');
//this is where I would call reset() on cityDropdown's state, if I could figure out how to get to it :/
},
),
],
),
Run Code Online (Sandbox Code Playgroud)
这里最简单的解决方案是使用GlobalKey<T>:https://docs.flutter.io/flutter/widgets/GlobalKey-class.html
GlobalKey<MyDropDownState>在页面窗口小部件中创建并将其传递给MyDropDown.key.currentState.reset();或者,您可以使用Flutter自己使用的控制器模式.例如TextField有TextEditingController:https://docs.flutter.io/flutter/widgets/TextEditingController-class.html
| 归档时间: |
|
| 查看次数: |
8619 次 |
| 最近记录: |