Flutter中ListView内Button的onPressed自动触发问题排查
嘿,这可不是Flutter的bug哦,是你代码里一个很容易踩的小坑!我帮你揪出问题所在啦:
你在给FlatButton的onPressed赋值时,直接写了inviteClicked(employee)——这会导致在Widget构建的过程中就立刻执行这个方法,而不是等用户点击按钮的时候才触发。
问题根源
Flutter的onPressed需要接收一个VoidCallback类型的函数(也就是无参、无返回值的函数对象)。你现在的写法是直接调用了方法,把方法执行后的返回值传给了onPressed,这完全不符合要求,自然会在每行加载时就自动触发这个方法。
修复方法
把onPressed的赋值改成用匿名函数包裹,这样只有当用户点击按钮时,才会执行inviteClicked(employee):
var button = new FlatButton( onPressed: () => inviteClicked(employee), // 用箭头函数包裹,点击时才执行 child: container );
如果你的inviteClicked方法不需要额外参数,也可以直接传递函数引用(比如onPressed: inviteClicked),但这里你需要传入employee参数,所以用匿名函数包裹的方式最适合。
另外补充一句:你的ModelEmployeeRow是StatelessWidget,如果后续employee数据会发生变化,可能需要考虑改成StatefulWidget来管理状态,但当前的自动触发问题用上面的方法就能解决啦!
内容的提问来源于stack exchange,提问作者MistyD
相关产品推荐
相关产品推荐

