Flutter/Dart Uri 不会在 URL 中转义冒号“:”

Jes*_*sse 9 url uri http dart flutter

创建了以下 uri:

final _url = "https://example.com/api/";
final _uri = Uri(path: _url, queryParameters: _params);
Run Code Online (Sandbox Code Playgroud)

结果是 http%3A//example.com/api/+{params...}

我试过通过\:和其他方法逃脱,但没有运气:/

此问题仅在通过 Uri 运行时发生,我无法在网上找到任何资源来解决此问题。

sha*_*eep 16

因此,从 url 字符串在 Dart 中创建 URI 的最佳方法是使用Uri带有静态方法的dart 包httphttps

所以你必须改变你的代码如下:

final _authority = "example.com";
final _path = "/api";
final _params = { "q" : "dart" };
final _uri =  Uri.https(_authority, _path, _params);
Run Code Online (Sandbox Code Playgroud)

在此处输入图片说明


小智 11

你的意图是

final String _url = "https://example.com/api/";
final Uri _uri = Uri
    .parse(_url)  // parse string
    .replace(queryParameters: _params);  // set params (no need manual escape, Uri do it itself)
Run Code Online (Sandbox Code Playgroud)

  • 聪明的方式。如果没有参数,则只需 `Uri _uri = Uri.parse(_urlString)` (5认同)

Nae*_*Nae 7

代替:

final _url = "https://example.com/api/";
final _uri = Uri(path: _url, queryParameters: _params);
Run Code Online (Sandbox Code Playgroud)

和:

final _url = "example.com/api/";
final _uri = Uri.https(path: _url, queryParameters: _params);
Run Code Online (Sandbox Code Playgroud)