为什么在使用变量时无法在 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 中有空格时,问题就出现了(显然)。这就是它给出这些错误的原因。删除它们已经解决了我的问题。