我正在使用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'
答案 0 :(得分:2)
好,您只需更改 button() 创建方法,例如
onPressed: _launchURL(url)
至onPressed: () => _launchURL(url),
就是这样。
答案 1 :(得分:1)
_launchURL
和_launchURL(url)
之间存在巨大差异。
如果您在没有按钮按下方法的情况下在按钮单击事件中设置了_launchURL(url)
,则您正在调用方法;如果您通过_launchURL
,则仅传递了将在按钮调用时执行的方法实例。