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
相关产品推荐
相关产品推荐

