我有一个带有回调函数的小部件,但没有调用回调函数。
我的代码如下:
DetailsRow(
title: "APP",
value: 'MYTEXT',
link: '',
linkTap: () {
print("needs to here"); // this is not getting call
),
详细行小部件:
`class DetailsRow extends StatelessWidget {
const DetailsRow(
{super.key,
required this.title,
this.value,
this.link,
this.linkTap});
final String title;
final String? value;
final String? link;
final VoidCallback? linkTap;
void onlinkTap() async {
if (linkTap != null) {
print('function call1'); // it is call here
linkTap;
} else {
final Uri url = Uri.parse(link!);
await openWebBrowser(url);
}
}
Widget build(BuildContext context) {
return InkWell(
onTap: onlinkTap,
child: Text(
value!,
),
);
}
}`
我也尝试使用gestureDetector小部件。
当您简单地写出函数名称(如
linkTap
)时,您只是引用它 - 或者换句话说,您没有调用该函数。
这就是这里发生的事情:
if (linkTap != null) {
print('function call1');
linkTap; // <- This is simply a reference, not calling
}
要调用函数,您应该执行
functionName()
。一般来说,您应该能够执行 linkTap()
来调用您的函数。但是,由于您的 linkTap
回调可为空,因此这不起作用,因为 Dart 会显示错误。
所以正确的解决方案是:
if (linkTap != null) {
print('function call1'); // it is call here
linkTap!();
}
或者
if (linkTap != null) {
print('function call1'); // it is call here
linkTap?.call();
}
就像pskink评论的那样。
希望这可以帮助您更好地理解!