Flutter中CupertinoButton.onPressed设空回调报错问题求助

相关代码
class _LoginTipPage extends State<LoginTipPage> { @override Widget build(BuildContext context) { return const CupertinoPageScaffold( navigationBar: CupertinoNavigationBar( middle: Text('Login'), ), child: Center( child: Column( mainAxisSize: MainAxisSize.min, children: <Widget>[ CupertinoButton.filled( onPressed: () {}, child: Text('Enabled'), ), ], ), ), ); } }
问题描述
在上述代码中,当设置onPressed: () {},时会报错,但设置为onPressed: null,则可正常运行。已升级至最新版本的Flutter和Android Studio,寻求该问题的解决方案。
解决方案
问题根源在于你给CupertinoPageScaffold添加了const修饰符:
- 使用
const构造组件时,所有子组件的参数必须是编译时常量 - 匿名函数
() {}是运行时生成的对象,不属于编译时常量,因此触发报错;而null是编译时常量,符合要求
你可以任选以下两种方式解决:
去掉const修饰符
取消CupertinoPageScaffold前的const,组件不再是常量构造,即可使用匿名函数:return CupertinoPageScaffold( navigationBar: CupertinoNavigationBar( middle: Text('Login'), ), child: Center( child: Column( mainAxisSize: MainAxisSize.min, children: <Widget>[ CupertinoButton.filled( onPressed: () {}, child: Text('Enabled'), ), ], ), ), );保留const并使用静态方法
如果想保留const的性能优化,可将点击逻辑提取为静态方法(静态方法属于编译时常量):class _LoginTipPage extends State<LoginTipPage> { static void handleButtonPress() { // 这里编写按钮点击后的逻辑 } @override Widget build(BuildContext context) { return const CupertinoPageScaffold( navigationBar: CupertinoNavigationBar( middle: Text('Login'), ), child: Center( child: Column( mainAxisSize: MainAxisSize.min, children: <Widget>[ CupertinoButton.filled( onPressed: handleButtonPress, child: Text('Enabled'), ), ], ), ), ); } }
内容的提问来源于stack exchange,提问作者Elvist Lui
相关产品推荐
相关产品推荐

