我的目标就是这样。单击title属性时,我想更改其属性。
我附上了我面临的问题的gif图。代码演示
class _MyHomePageState extends State<MyHomePage> {
Icon _searchIcon = Icon(Icons.search, size: 40);
Icon _searchIcon2 = Icon(Icons.alarm, size: 40);
void _searchPressed() {
setState(() {
if (this._searchIcon.icon == Icons.search) {
this._searchIcon = _searchIcon2;
} else {
this._searchIcon = Icon(Icons.search);}});}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
leading: IconButton(
icon: _searchIcon,
onPressed: _searchPressed,
),
title: IconButton(
icon: _searchIcon,
onPressed: () => _searchPressed,),),);}}
正如@CopsOnLoad所建议的,它应该是
onPressed: _searchPressed
或
onPressed: () => _searchPressed()
onPressed: () => _searchPressed
不起作用的原因是,您刚刚传递到onPressed
属性的匿名函数只返回_searchPressed
蓝图,而没有实际运行该函数。因此,从本质上讲,它除了给onPressed
属性提供_searchPressed
函数本身的蓝图之外,什么都不做。
因此,下面的代码之所以有效,是因为您实际上正确地将函数_searchPressed
放入了onPressed
属性
onPressed: _searchPressed
在标题的IconButton
中,
代替
onPressed: () => _searchPressed
使用
onPressed: _searchPressed
或
onPressed: () => _searchPressed()