gpt4 book ai didi

dart - 从状态类外部更改 Flutter 小部件的状态

转载 作者:IT老高 更新时间:2023-10-28 12:31:15 25 4
gpt4 key购买 nike

我创建了一个 DropdownButton 作为 StatefulWidget。该类称为 MyDropDown,对应的状态称为 MyDropDownState。

我在 MyDropDownState 类中创建了一个重置​​函数:

void reset(){
setState((){
_selection = null;
});
}

这会将选择设置为 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;
});
},
);
}

}

在我的主页中,我创建了一个新的 MyDropDown

final MyDropDown cityDropdown = new MyDropDown(cityLookup);

那么这是 AppBar(在 Scaffold 内),它包含我想要按下以重置下拉菜单的 IconButton。

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 :/
},
),
],
),

最佳答案

这里最简单的解决方案是使用 GlobalKey<T> : https://docs.flutter.io/flutter/widgets/GlobalKey-class.html

  1. 创建 GlobalKey<MyDropDownState>在您的页面小部件中并将其传递给 MyDropDown。
  2. 在您的回调中使用该键:key.currentState.reset() ;

或者,您可以使用 Flutter 本身使用的 Controller 模式。例如 TextFieldTextEditingController : https://docs.flutter.io/flutter/widgets/TextEditingController-class.html

关于dart - 从状态类外部更改 Flutter 小部件的状态,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49485375/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com