You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

问题解决:CupertinoButton.filled设置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是编译时常量,符合要求

你可以任选以下两种方式解决:

  1. 去掉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'),
            ),
          ],
        ),
      ),
    );
    
  2. 保留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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.12 22:37:07