(Flutter) HTTPClient 无效参数:URI 中未指定主机

Osc*_*ott 10 uri host heroku httpclient flutter

目前正在开发一个允许用户查看存储在 Heroku 上的数据库的小应用程序,但是我在使用数据库的 URL 时遇到了上述问题:“.herokuapp.com/api/”。

var client = createHttpClient();
var response = await client.read('<example>.herokuapp.com/api/<data>');
List data = JSON.decode(response);
Run Code Online (Sandbox Code Playgroud)

Heroku 似乎不使用 HTTP(S) 或 www,我认为后者是问题所在。

有谁知道我如何绕过或解决这个问题?

小智 29

我知道这是一个老问题,但我偶然发现了这个问题,并通过在 URL 前添加“http://”来修复它。


ecl*_*oft 9

问题之一是 API URL 前没有“http://”;

解决方案 在您的 API URL示例之前添加“http://” API_URL = “api.openweathermap.org/data/2.5/weather?q={city%20name}&appid={your%20api%20key}”

通过添加“http://”它变成“ http://api.openweathermap.org/data/2.5/weather?q= {city%20name}&appid={your%20api%20key}”


Par*_*iya 9

这是因为应用尝试异步获取 renderUrl。在取回渲染 Url 之前,它为空。NetworkImage(renderUrl ?? '') 然后尝试使用空字符串作为 url 并导致异常。我不确定这是否是最好的解决方案,但这似乎有效:

有很多方法可以解决这个问题,这里是其中一些

  1. https://在你的uri之前添加

  2. 对于 Image:我决定在将其放入小部件之前检查图像 url 是否为空:

     CircleAvatar(
        backgroundColor: Colors.grey,
        backgroundImage: _urlImage.isNotEmpty
            ? NetworkImage(_urlImagem)
            : null,
      ),
    
    Run Code Online (Sandbox Code Playgroud)

  • 第二个选择对我有帮助。 (2认同)

小智 8

如果您在最新版本的 flutter 中仍然遇到此问题,请尝试检查以下内容。

以前uriString类型。现在它是http 请求的Uri类型。

如果我们尝试使用 url 作为

String urlPath = '<example>.herokuapp.com/api/<data>';
client.read(Uri(path: urlPath));
Run Code Online (Sandbox Code Playgroud)

我们将得到异常,即URI 中未指定主机

这可以通过使用Uri类中的parse方法来解决

client.read(Uri.parse(urlPath));
Run Code Online (Sandbox Code Playgroud)

它解决了这个问题。

  • 好的!为我工作! (2认同)