#flutter #http-patch #flutter-http
#трепетание #http-исправление #flutter-http
Вопрос:
У меня есть класс StyleItem, который выглядит следующим образом:
class StyleItem {
String id;
double dx;
double dy;
double scale;
double rotation;
StyleItem({this.id, this.dx, this.dy, this.scale, this.rotation});
Map toJson() {
return {
'id': id,
'dx': dx,
'dy': dy,
'scale': scale,
'rotation': rotation,
};
}
@override
String toString() {
return 'id: $id, dx: $dx, dy: $dy, scale: $scale';
}
}
Затем у меня есть запрос на исправление, тело которого должно выглядеть следующим образом
{
"occasion": "[Date, Outing, Ethnic]",
"weather": "[Rainy, Sunny]",
"style_items": [
{"id": "5faacbb3ac0d1900177e94bd", "dx": "0.35462962962962963", "dy": "0.7447916666666667", "scale": "0.4", "rotation": "0.0"}
]
}
Предполагается , что поле style_items
должно содержать массив такой карты объекта класса StyleItem
.
Я пробовал кодировать эти объекты с jsonEncode
помощью , но тогда серверная часть не могла читать id
.
И через Postman я убедился, что серверная часть работает должным образом.
Для создания запроса на исправление я использую http
package . Используется следующий код
// This is the complete function
// First I upload a picture for which I get a 'imgUrl'
// With this and other information, I make the patch request
// Field 'style_items' is the one which causes problem.
Future<bool> addNewLook(var image, Map<String, String> details, List<StyleItem> styleItems) async {
try {
Uri savingImgUrl = Uri.http(BASE_URL, CHAT_IMAGE_URL);
var request = http.MultipartRequest('POST', savingImgUrl);
request.files
.add(await http.MultipartFile.fromPath('image', image.path));
request.headers.addAll({'token': token});
var res = await request.send();
var response = await http.Response.fromStream(res);
var resBody = jsonDecode(response.body);
String imgUrl = resBody['url'];
print("ImgUrl: " imgUrl);
// Required section, where I face the issue.
Uri savingDataUrl = Uri.http(BASE_URL, CREATE_LOOK "/$_id");
var body = {
'image': imgUrl,
'occasion': details['occasion'],
'weather': details['weather'],
// This field has the problem
'style_items': jsonEncode(styleItems.map((e) => e.toJson()).toList())
};
response = await http.patch(savingDataUrl, headers: {
'token': token
}, body: body);
if(response.statusCode!=200) {print("ErrorAddingNewLook! Response: " response.body); return false;}
print(response.body);
resBody = jsonDecode(response.body);
Look look = Look();
look.fromJson(resBody['data']);
_request.preMadeLooks.add(look);
print("SavingLooks: Response: " resBody.toString());
return true;
} catch(err) {
print("ErrorAddingNewLook! Error: " err.toString());
return false;
}
}
Кроме того, я пытался кодировать поле style_items
в формате Json по-разному
// Try1
styleItems.map((e) => jsonEncode(e.toJson())).toList()
// Try2
styleItems.map((e) => jsonEncode(e.toJson())).toList().toString()
// Try3
jsonEncode(styleItems.map((e) => jsonEncode(e.toJson())).toList())
Комментарии:
1. добавьте также код вызова api
2. @AkshitOstwal Спасибо, что изучили проблему.. Я обновил вопрос, я так долго застрял на этом.. Я надеюсь скоро найти решение. Спасибо .. сэр!
3. легче отлаживать, если вы можете показать, каковы ваши style_items после jsonEncode ()
4. @xion Это элементы стиля после jsonEncode()[{«id»:»5fc8b108e0602300172cf81e»,»dx»:0.1685185185185185,»dy»:0.1963541666666667,»scale»:0.2,»rotation»:0.0},{«id»:»5fc78cafdb233c0017961dd4″,»dx»:0.17870370370370375,»dy»: 0.49218750000000006, «масштаб»: 0.2, «вращение»: 0.0}]
5. основываясь на том, что вы показываете в своем вопросе, и style_items в комментарии, столбцы dx, dy имеют различный тип, 1 — строка, а другой — целое число, следует ли вам беспокоиться об этом?