【问题标题】:Flutter how to call Link together with methodFlutter如何与方法一起调用Link
【发布时间】:2022-08-18 07:29:48
【问题描述】:

import \'package:url_launcher/link.dart\';

如何拨打followLinklaunchUrl()

child: Link(
target: LinkTarget.blank,
uri: Uri.parse(\'https://www.google.com\'),
builder: (context, followLink) =>
ElevatedButton(
  onPressed: followLink,
  style: ElevatedButton.styleFrom(primary: constants.appBarColor),
  child: Container(
    width: MediaQuery.of(context).size.width,
    height: SizeConfig.safeBlockHorizontal * 4.5,
    child: Center(
      child: Text(
        \'Visit Link\',
        style: TextStyle(
            fontSize: SizeConfig.safeBlockHorizontal * 4.05
        ),
      ),
    ),
  ),
),)

点击onPress后我需要调用这个方法launchUrl()

Future launchUrl() async{
await Future.delayed(const Duration(milliseconds: 900)).whenComplete(() => {
  showToastWidget(\'Link clicked\', Colors.green),
  callPointsPerClick();
});}

我在launchUrl() 下面尝试了这段代码,但followLink 不是

  onPressed: (){
followLink;
launchUrl();}
  • followLink 后面缺少括号,所以它不是函数调用。 VTC 为错字。

标签: flutter hyperlink onpress


【解决方案1】:

TL;博士

修改您的 sn-p 以在分号 ; 之前的 followLink; 行末尾添加括号,以实际调用如下方法:

onPressed: (){
  followLink();
  launchUrl();
}

详细介绍

当您只键入一个没有括号的方法名称时,这意味着您只是在引用它,当您将括号添加到名称时意味着您正在调用它。

当代码是这样的:

onPressed: followLink,

它起作用是因为您告诉ElevatedButton 引用followLink 方法以便稍后在onPressed 发生时调用它,所以您只需将onPressed 指向followLink 以便稍后调用它。

当您将代码更改为以下内容时:

onPressed: (){
  followLink;
  launchUrl();
}

它不起作用,因为在这里您不需要传递方法的引用,您需要实际调用它,因为回调引用是它自己的匿名方法,而方法的主体是要执行的实际指令。

据此,followLink; 行实际上没有任何意义,您应该在编辑器中看到删除它的警告,launchUrl(); 行有效,因为您实际上是在使用括号来调用该函数。

所以你的理想是正确的,但你必须根据上述原因稍微修改你的 sn-p 为以下:

onPressed: (){
  followLink();
  launchUrl();
}

【讨论】:

    【解决方案2】:

    请关闭此线程,@Moaz El-sawaf 正确回答了此问题。谢谢

    onPressed: (){
      followLink();
      launchUrl();
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-04-04
      • 1970-01-01
      • 2018-09-05
      • 1970-01-01
      • 1970-01-01
      • 2021-05-19
      • 1970-01-01
      • 2021-05-16
      相关资源
      最近更新 更多