Flutter开发中ElevatedButton按钮灰化无法点击问题排查求助
问题根因
你在向Quiz组件传递点击回调函数时,错误地对_answeredQ加了括号执行,最终传递给ElevatedButton的onPressed参数的是函数执行后的返回值。你的_answeredQ函数无返回值,也就是null,而Flutter的ElevatedButton默认在onPressed为null时会进入灰化不可点击状态,这就是问题的直接诱因。
修复方案
- 首先修改
TestApp组件build方法中实例化Quiz的代码,去掉_answeredQ后的括号,直接传递函数引用即可:
// 修改前(错误写法) body: _i < _question.length ? Quiz(qMap: _question, aFunction: _answeredQ(), index: _i) : Result(), // 修改后(正确写法) body: _i < _question.length ? Quiz(qMap: _question, aFunction: _answeredQ, index: _i) : Result(),
- (可选优化)为所有函数类型的参数补充明确的类型声明,提前避免同类传值错误:
// Quiz类中修改aFunction的声明 final void Function() aFunction; // AnswerW类中修改selAns的声明 final void Function() selAns;
补充说明:加括号的函数写法会立即执行函数、返回执行结果,不带括号的写法才是传递函数本身的引用,所有组件的回调参数(onPressed、onTap等)都需要接收函数引用。
内容的提问来源于stack exchange,提问作者Shaffaan Laughs at u
相关产品推荐
相关产品推荐

