I hope you solved this already but in case you didn't
I faced the same problem and found a workaround I had a similar API :
Here
the solution is that I added a counter variable inside ' [] ' while creating the request body map.
ex: products[$counter]
so it will give each key in the body map a different name like this
final Map<String, dynamic> body = Map<String, dynamic>();
if (this.products != null) {
for (int i = 0; i < products.length; i++) {
body['products[$i]'] = json.encode(products[i]);
}
and yet it will still be recognized by the server as same name parameter.