我有两个几乎相同的函数:
void _launchGoogleMapsURL() async {
var GoogleMapsLongLat = widget.place!.location!.LongLatforGoogleMaps()!;
var url ="https://maps.google.com?q=${GoogleMapsLongLat}"; // DOES NOT WORK
if (await canLaunch(url)) {
await launch(url);
}
}
和:
void _actionViewMoreArticles() async {
var url = "https://mywebsitename.com/plainurl"; // WORKS!
if (await canLaunch(url)) {
await launch(url);
}
}
按钮:
CupertinoButton(
padding: EdgeInsets.all(0),
child: Row(
children: <Widget>[
Padding(
padding: EdgeInsets.only(right: 0, left: 20),
child: Text(
Localized.of(context)!.trans(LocalizedKey.navigate) ?? "",
style: TextStyle(
fontFamily: TraloFont,
fontSize: 16,
color: Colors.white),
),
),
],
),
onPressed: _launchGoogleMapsURL,
),
因此,如果我尝试用long/lat打开谷歌地图,它是不起作用的(在我的真实设备上测试时,Xcode不会给我任何错误(,但当我使用示例中显示的"纯URL"时,它确实起作用。
最后,下面是函数的样子:
extension longLatforGoogle on String {
LongLatforGoogleMaps (){
var latAndLng = this.split(",").map((text) => double.tryParse(text));
if (latAndLng.length == 2) {
return latAndLng;
}
return null;
}
}
我做错了什么?
编辑:
控制台上写着:
component name for https://maps.google.com?q=(52.366722, 4.889386) is null
我在"纯URL"中也遇到了同样的错误,但这个错误实际上打开了页面,并且有效。
如果我打印GoogleMapsLongLat,我会得到:
(52.366722, 4.889386)
如果我只在Xcode中使用等待启动(url(,它会给我以下错误:
terminating app due to uncaught exception 'nsinvalidargumentexception'
原因:the specified URL has an unsupported scheme. Only HTTP and HTTP urls are supported.
但这很奇怪,因为正如你所看到的,我正在使用HTTPS。
我自己修复了它。谢谢你的轻推。
我做到了:
var NoWhiteSpaceURL = Googleurl.replaceAll(' ', '');
if (await canLaunch(NoWhiteSpaceURL)) {
await launch(NoWhiteSpaceURL);
}
当URL中有空白时,问题就会出现(显然(。这就是它给出这些错误的原因。删除它们为我解决了问题。