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

Flutter中传入函数仅直接赋值时生效,搭配Navigator调用失效如何解决?

解决方案

正确代码

修改buildCardNews中的onTap逻辑如下即可同时执行跳转和传入的自定义函数:

Widget buildCardNews(context, article, Function()? function) {
  return InkWell(
    onTap: () {
      // 空安全调用传入的函数,不会因为函数为null报错
      function?.call();
      // 原有页面跳转逻辑不变
      Navigator.of(context).push(
        MaterialPageRoute<void>(
          builder: (BuildContext context) =>
              WebViewScreen(article['url'], article['source']['name']),
        ),
      );
    },
    // 其余原有代码保持不变
  );
}

失效原因说明

  • 直接将function赋值给onTap时,是把函数本身作为点击回调,触发点击时系统会自动执行该函数,因此逻辑正常。
  • 自定义onTap回调时仅写function;,只是引用了函数对象,没有触发执行逻辑,必须添加调用语法才会运行函数内部代码。
  • 选用function?.call()的写法适配了Flutter空安全规范,即使传入的function为null也不会抛出异常。

可选调整

如果需要等插屏广告展示关闭后再跳转页面,可以将跳转逻辑移到_showInterstitialAd方法的onAdDismissedFullScreenContent回调中即可。

内容的提问来源于stack exchange,提问作者Abdulaziz

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 14:15:08