flutter 中未调用回调函数

问题描述 投票:0回答:1

我有一个带有回调函数的小部件,但没有调用回调函数。

我的代码如下:

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小部件。

flutter function dart callback flutter-dependencies
1个回答
0
投票

当您简单地写出函数名称(如

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评论的那样。

希望这可以帮助您更好地理解!

© www.soinside.com 2019 - 2024. All rights reserved.