我构建的函数只能统一工作,解决方案是什么?



我有这个空白

void _showInterstitialAd() {
if (_interstitialAd != null) {
_interstitialAd!.fullScreenContentCallback = FullScreenContentCallback(
onAdDismissedFullScreenContent: (InterstitialAd ad) {
ad.dispose();
_createInterstitialAd();
},
onAdFailedToShowFullScreenContent: (InterstitialAd ad, AdError error) {
ad.dispose();
_createInterstitialAd();
},
);
_interstitialAd!.show();
}
}

我在listView中传递它

body: FutureBuilder(
future: data.getBusiness(),
builder: (context, snap) =>
snap.connectionState == ConnectionState.waiting
? const Center(child: CircularProgressIndicator())
: ListView.builder(
physics: const BouncingScrollPhysics(),
scrollDirection: Axis.vertical,
itemBuilder: (context, index) => buildCardNews(
context,
data.business?[index],
_showInterstitialAd,
),
itemCount: data.business!.length,
),
),

并在小部件

中接收它
Widget buildCardNews(context, article, Function()? function) {
return InkWell(
onTap: () {
Navigator.of(context).push(
MaterialPageRoute<void>(
builder: (BuildContext context) =>
WebViewScreen(article['url'], article['source']['name']),
),
);
function;
},

它把我带到下一个屏幕,但你经过的空白不起作用它只有在你像这样直接输入时才有效:

Widget buildCardNews(context, article, Function()? function) {
return InkWell(
onTap: function,

但是我不想这样我想用导航器

如果你有一个函数:

Function? functionName;

那么有两种用法:

  • 关键字functionName是指函数本身。这样你就可以像之前那样把这个函数作为参数传递。

  • 如果你在函数名旁边使用括号,你正在调用这个函数并得到它的结果:functionName()。当您想要运行函数的内容时,可以使用这种方式。

在您的示例中:

onTap: () {
[...]
function; <--- This is only a reference. You should use function();
},

您使用匿名回调结构创建了一个函数:(){},它创建了一个函数对象并将其引用传递给onTap。所以在它里面,如果你想调用interstialad,你应该包含括号(function())。function的方式只是对函数的引用,因此不执行任何操作。

在另一种情况下,您只传递对函数的引用,这是inkwell所期望的:

onTap: function

当你有疑问的时候,只要问自己是否想要调用函数的内容,或者你需要传递一个引用以便稍后调用它。