【问题标题】:Error while sending List data to cloud firestore using REST api in flutter在颤动中使用 REST api 将列表数据发送到云 Firestore 时出错
【发布时间】:2020-10-15 01:12:51
【问题描述】:

我无法在 Flutter 中使用 REST api 将字符串列表发送到云 Firestore。

//###### 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"]

【问题讨论】:

    标签: firebase rest flutter google-cloud-firestore flutter-web


    【解决方案1】:

    尝试像这样编写facility 数组值:

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

    "values" 部分来自ValuearrayValue 的引用。

    【讨论】:

    • 感谢@Juan Laara ..当我们手动添加单个数组元素时它工作正常。但是当我分配列表对象时仍然面临同样的问题
    • 更新了答案。您需要从visit.facility 中取出值并将它们放入上述格式。
    • 谢谢@Juan Lara。现在问题已解决。你能分享一下插入 mapValue 的语法吗?我试过这个link,但做不到。你能帮我在 API sting 中用云火库编写 whereorderBy 子句吗
    • 我建议使用 Try this API 工具来验证您的语法。我使用createDocument reference 来验证一个数组字段。它也应该对地图字段有所帮助。对于您的查询,请使用runQuery reference。如果你仍然卡住,请用一个例子开始另一个问题。
    • 非常感谢@JuanLaara。所有问题都已解决。
    猜你喜欢
    • 2021-07-29
    • 2021-01-25
    • 1970-01-01
    • 2018-06-29
    • 2020-04-06
    • 2017-03-15
    • 2020-05-23
    • 2021-09-02
    • 2019-04-17
    相关资源
    最近更新 更多