为什么在使用变量时无法在 Flutter 中导航到 URL?
Why can I not navigate to URL in Flutter when variable is used?
我有两个几乎相同的功能:
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 打开 Google 地图,它不起作用(Xcode 在我的真实设备上测试时没有给我任何错误),但是当我使用示例中所示的 'plain 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
我在使用 'plain URL' 时遇到了同样的错误,但它确实打开了页面并且有效。
如果我打印 GoogleMapsLongLat,我得到:
(52.366722, 4.889386)
如果我只在 Xcode 中使用 await launch(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 中有空格时,问题就出现了(显然)。这就是它给出这些错误的原因。删除它们已经解决了我的问题。
我有两个几乎相同的功能:
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 打开 Google 地图,它不起作用(Xcode 在我的真实设备上测试时没有给我任何错误),但是当我使用示例中所示的 'plain 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
我在使用 'plain URL' 时遇到了同样的错误,但它确实打开了页面并且有效。
如果我打印 GoogleMapsLongLat,我得到:
(52.366722, 4.889386)
如果我只在 Xcode 中使用 await launch(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 中有空格时,问题就出现了(显然)。这就是它给出这些错误的原因。删除它们已经解决了我的问题。