为什么"onpressed"在单击"title"时不起作用,但在单击"leading"属性时起作用?



我的目标就是这样。单击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()

最新更新