You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Flutter Map中如何为同一键名添加多个不同值?

Dart/Flutter 中实现多重复键的参数构造

Dart 里的标准Map是键唯一的集合,直接通过addAll添加重复键会覆盖已有值,没法生成你想要的多相同键对应不同值的结构。以下是针对不同场景的解决方案:

场景1:给后端发送表单/API请求(最常见需求)

如果你的目标是生成类似item_name[]=Arpit&item_name[]=Ranjeet这种格式的请求参数(常用于application/x-www-form-urlencoded或multipart/form-data),可以这样处理:

方式1:构造查询字符串直接发送

// 假设三个数据源列表长度一致
List<String> shopping_item_name = ['Arpit', 'Ranjeet', 'Prabhat', 'Rohan'];
List<String> shopping_quantity = ['2', '3', '10', '3'];
List<String> shopping_unitPrice = ['1', '1', '1', '1'];

// 生成所有键值对条目
List<MapEntry<String, String>> paramEntries = [];
for (int i = 0; i < shopping_item_name.length; i++) {
  paramEntries.add(MapEntry('item_name[]', shopping_item_name[i]));
  paramEntries.add(MapEntry('item_description[]', shopping_quantity[i]));
  paramEntries.add(MapEntry('item_price[]', shopping_unitPrice[i]));
}

// 构造符合x-www-form-urlencoded格式的请求体
String requestBody = paramEntries
    .map((entry) => '${Uri.encodeComponent(entry.key)}=${Uri.encodeComponent(entry.value)}')
    .join('&');

// 发送请求(以http包为例)
var response = await http.post(
  Uri.parse('你的接口地址'),
  body: requestBody,
  headers: {'Content-Type': 'application/x-www-form-urlencoded'},
);

方式2:用JSON数组传递(更规范的后端交互方式)

如果后端支持JSON格式,推荐构造数组结构而非重复键,可读性和扩展性更好:

List<Map<String, dynamic>> items = [];
for (int i = 0; i < shopping_item_name.length; i++) {
  items.add({
    'item_name': shopping_item_name[i],
    'item_description': shopping_quantity[i],
    'item_price': shopping_unitPrice[i],
  });
}

// 发送JSON请求
var response = await http.post(
  Uri.parse('你的接口地址'),
  body: jsonEncode({'items': items}),
  headers: {'Content-Type': 'application/json'},
);

场景2:生成类似示例的字符串结构

如果只是要生成你给出的那种带重复键的字符串格式,可以通过List<MapEntry>实现:

List<MapEntry<String, String>> entries = [];
for (int i = 0; i < shopping_item_name.length; i++) {
  entries.add(MapEntry('item_name[]', shopping_item_name[i]));
  entries.add(MapEntry('item_description[]', shopping_quantity[i]));
  entries.add(MapEntry('item_price[]', shopping_unitPrice[i]));
}

// 转换为目标字符串
String resultStr = entries.map((e) => "'${e.key}': '${e.value}'").join(', ');
print('{$resultStr}');
// 输出结果和你给出的示例一致

内容的提问来源于stack exchange,提问作者Arpit Jai

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.11 09:46:40