构建小部件时启动_launchURL

时间:2019-06-28 11:57:08

标签: flutter dart

我正在使用url_launcher程序包在我的应用程序中启动URL。

我需要使用单独的按钮启动许多链接。

但是,当我加载我的无状态窗口小部件时,它会启动“ _launchURL”功能并立即打开https://www.yahoo.com

我相信这与在创建小部件时调用它有关。但是“ onPressed”内部的函数不应在实际按下之前调用,对吧?

class myStateless extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return ListView(
        children: <Widget>[
            button("Link 1", "https://www.yahoo.com"),
            button("Link 2", "https://www.google.com"),
        ]
    );
  }
}

Widget button(String text, String url) {
    return RaisedButton(
        child: Text(text),
        onPressed: _launchURL(url),
      );
}

_launchURL(url) async {
  if (await canLaunch(url)) {
    await launch(url);
  } else {
    throw 'Could not launch $url';
  }
}

然后我得到了错误: type 'Future<dynamic>' is not a subtype of type 'String'

2 个答案:

答案 0 :(得分:2)

好,您只需更改 button() 创建方法,例如

onPressed: _launchURL(url)onPressed: () => _launchURL(url),

就是这样。

答案 1 :(得分:1)

_launchURL_launchURL(url)之间存在巨大差异。

如果您在没有按钮按下方法的情况下在按钮单击事件中设置了_launchURL(url),则您正在调用方法;​​如果您通过_launchURL,则仅传递了将在按钮调用时执行的方法实例。

>