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

Flutter中如何使用dio通过post方法在form-data中传递列表

enter image description here

Flutter Dio FormData 列表参数提交方案

Dio的FormData本身支持列表参数提交,只需根据后端接收规则调整参数格式即可,以下是两种通用实现方式:

场景1:后端默认接收 key[]=value1&key[]=value2 格式数组

大部分PHP、Node、Python后端框架默认适配该格式,直接给键名加[]后缀即可:

import 'package:dio/dio.dart';

void postForm() async {
  final dio = Dio();
  // 示例列表参数
  List<String> hobbyList = ["阅读", "运动", "编程"];
  final formData = FormData.fromMap({
    // 列表参数键名加[]后缀
    "hobby[]": hobbyList,
    // 其他普通参数
    "username": "test",
    "age": 24
  });
  try {
    final res = await dio.post(
      "你的接口地址",
      data: formData,
    );
    print(res.data);
  } catch (e) {
    print("请求错误:$e");
  }
}

场景2:后端要求接收 key[0]=value1&key[1]=value2 带索引格式数组

部分Java SpringBoot、Go后端会要求该格式,需手动遍历列表拼接带索引的键名:

import 'package:dio/dio.dart';

void postForm() async {
  final dio = Dio();
  List<String> hobbyList = ["阅读", "运动", "编程"];
  final formData = FormData();
  // 遍历列表逐个添加字段
  for (int i = 0; i < hobbyList.length; i++) {
    formData.fields.add(MapEntry("hobby[$i]", hobbyList[i]));
  }
  // 添加普通参数
  formData.fields.add(const MapEntry("username", "test"));
  formData.fields.add(const MapEntry("age", "24"));
  try {
    final res = await dio.post(
      "你的接口地址",
      data: formData,
    );
    print(res.data);
  } catch (e) {
    print("请求错误:$e");
  }
}

注意事项

  • 若提交的是嵌套对象组成的列表,需按照后端规则拼接键名,例如userList[0].name=xxx,或先将单个对象序列化为JSON字符串后提交
  • 提交前可打印formData.fields确认字段格式与后端要求一致
  • Dio会自动为FormData请求设置正确的multipart/form-data请求头,无需手动配置

内容的提问来源于stack exchange,提问作者Arijit Sarkar

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.23 20:36:01