Я не могу отправить список строк в облачный хранилище с помощью REST api во флаттере.

//###### here is my code ##########

Future<bool> addVisit(Visit visit) async { //function
try {
var response = await http.post( //post method to send data
  "${VISIT_API}",
  headers:
      {"Authorization": "Bearer ${Utils.loginToken}"},

Работает нормально до «Facility», но при вставке «Facility» появляется ошибка: поскольку все остальные являются строковыми значениями, а Facility имеет тип List

  body: json.encode(
    {
      "fields": {
        "status": {"stringValue": visit.status},
        "id": {"stringValue": visit.id},
        "name": {"stringValue": visit.name},
        "dateTime": {"integerValue": visit.dateTime},
        "mob": {"integerValue": visit.mob},
        "idproof": {"integerValue": visit.idproof},
        "address": {"stringValue": visit.address},
        "purpose ": {"stringValue": visit.purpose},
        "facility": {"arrayValue": visit.facility} //error line
      }
    },
  ),
);
print("reach");
if (response.statusCode == 200) { // successful
  print("visit added");
  return true;
} else {
  print(response.body);
}
} catch (err) {
throw err;
}
}

Я делаю пост-запрос вроде

 String VISIT_API =
 "https://firestore.googleapis.com/v1/projects/<database-id>/databases/(default)/documents/visits";

Сообщение об ошибке здесь

//###### Error Message #########
I/flutter (26972): {     //console output
I/flutter (26972):   "error": {
I/flutter (26972):     "code": 400,
I/flutter (26972):     "message": "Invalid JSON payload received. Unknown name \"arrayValue\" at 
'document.fields[8].value': Proto field is not repeating, cannot start list.",
I/flutter (26972):     "status": "INVALID_ARGUMENT",
I/flutter (26972):     "details": [
I/flutter (26972):       {
I/flutter (26972):         "@type": "type.googleapis.com/google.rpc.BadRequest",
I/flutter (26972):         "fieldViolations": [
I/flutter (26972):           {
I/flutter (26972):             "field": "document.fields[8].value",
I/flutter (26972):             "description": "Invalid JSON payload received. Unknown name 
\"arrayValue\" at 'document.fields[8].value': Proto field is not repeating, cannot start list."  
I/flutter (26972):           }
I/flutter (26972):         ]
I/flutter (26972):       }
I/flutter (26972):     ]
I/flutter (26972):   }
I/flutter (26972): }

//#################################

//visit.facility contains :
//["lunch" , "dinner"]
0
Avinash Mawle 24 Июн 2020 в 20:28

1 ответ

Лучший ответ

Попробуйте записать значение массива facility следующим образом:

"facility": {
  "arrayValue": {
    "values": [
      {
        "stringValue": "lunch"
      },
      {
        "stringValue": "dinner"
      }
    ]
  }
}

Часть "values" взята из ссылок на Value и arrayValue.

1
Juan Lara 25 Июн 2020 в 23:26