Dart| Flutter: 如何将map转换成查询字符串?(附实例)

718 阅读1分钟

本教程向您展示了将地图中的数值转换成URL查询字符串和查询字符串转换成地图的多种方法。这在Flutter中也适用。

查询字符串是一个键和值附加到URL上,由&

如何在dart和flutter中把地图转换为查询字符串

有时,我们在Dart中有一个键和值的地图

  var employee = {"email": "abc@abc.com", "id": "1"};

你想输出

http://dev.localhost.com:8080/?email=abc%40abc.com&id=1

URL类包含有以下参数的constrcutor scheme,host,port,path,queryParameters。

Uri Uri({
String? the scheme, String? userInfo, String? host, int? port, String? path, Iterable? pathSegments, String? query, Map? queryParameters, String? fragment, })

queryParameters 是一个字符串和动态的地图。

下面是一个例子

void main() {
  var employee = {"email": "abc@abc.com", "id": "1"};

  Uri queryStringUrl = new Uri(
      scheme: 'http',
      host: 'dev.localhost.com',
      port: 8080,
      path: '/',
      queryParameters: employee);
  print(queryStringUrl);
}

输出:

http://dev.localhost.com:8080/?email=abc%40abc.com&id=1

如何在dart和flutter中把查询字符串转换为地图?

这个例子解析了查询字符串,并转换为地图。

我们有多种方法可以做到这一点:

  • 使用Uri splitQueryString方法:Uri 类有splitQueryString 方法,有查询和编码参数。
Map splitQueryString(String query, {Encoding encoding = utf8})

它接受查询字符串并返回地图。它对包含查询字符串的完整URL不起作用。

  • 使用Uri parse和queryParameters :首先,使用Uri.parse()方法解析URL,并调用queryParameters 属性。它接收完整的URL并将其转换为Map。它对URL的子串,即查询字符串不起作用。

下面是一个例子

void main() {
  final String queryString = 'email=abc%40abc.com&id=1';
  final String completeUrl =
      'http://dev.localhost.com:8080/?email=abc%40abc.com&id=1';

  final Map map = Uri.splitQueryString(queryString);
  print(map); // {email: abc@abc.com, id: 1}

  final Map map1 = Uri.splitQueryString(completeUrl);
  print(map1); // {http://dev.localhost.com:8080/?email: abc@abc.com, id: 1}

  final Uri url1 = Uri.parse(queryString);
  print(url1.queryParameters); // {}

  final Uri url2 = Uri.parse(completeUrl);
  print(url2.queryParameters); //{email: abc@abc.com, id: 1}
}

输出

{email: abc@abc.com, id: 1}
{http://dev.localhost.com:8080/?email: abc@abc.com, id: 1}
{}
{email: abc@abc.com, id: 1}

结论

学习了如何在dart和flutter中把查询字符串解析成地图,反之亦然。