Отправка http-запроса на исправление со списком карт в flutter

#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 — строка, а другой — целое число, следует ли вам беспокоиться об этом?