【发布时间】:2021-10-17 11:31:55
【问题描述】:
使用这段代码sn-p调用firebase上的httpsCallable云函数:
@override
Future<InitializePickupRequestCommandResult> initialize(
ClientEntity client,
PositionEntity location,
PositionEntity destination, {
required bool isVehicleEmpty,
}) async {
final data = InitializePickupRequestCommand.from(
client,
location,
destination,
isVehicleEmpty: isVehicleEmpty,
).toJson();
final name = describeEnum(CloudFunctionNames.initializePickupRequest);
final initializePickupRequest = backend.httpsCallable(name);
final result = await initializePickupRequest.call(data);
return InitializePickupRequestCommandResult.from(
result.data as Map<String, dynamic>,
);
}
data 对象保存 CF 执行操作所需的所有数据,它的类型为 Map<String, dynamic>。
Map<String, dynamic> toJson() => {
"clientId": clientId,
"clientLat": clientLat,
"clientLng": clientLng,
"vehicleType": vehicleType,
"isVehicleEmpty": isVehicleEmpty,
"location": {
"lat": clientLat,
"lng": clientLng,
},
"destination": {
"placeId": destination.id,
"zip": destination.zip,
"city": destination.city,
"searchString": destination.searchString,
"lat": destination.lat,
"lng": destination.lng,
},
};
问题
每次尝试调用 CF 时,都会抛出此异常:
_AssertionError ('package:cloud_functions/src/https_callable.dart': 断言失败: line 33 pos 12: '_debugIsValidParameterType(parameters)': is not true.)
我尝试了什么
使用这些作为参数:
data as Map<String, dynamic>{...data}<String, dynamic>{...data}
尝试将{"dummy": "data"} 作为参数,CF 正常执行。不知道为什么!
那么应该如何将参数传递给 https 可调用云函数?
【问题讨论】:
-
我不确定,但如果最后一个逗号后面没有任何内容,可能是问题所在,例如
"lng": clientLng,、"lng": destination.lng,和最后一个},。尝试删除它们。在 Flutter 中没问题,但可能意味着 JSON 无效。 -
另一件事:在提交之前尝试
jsonEncode(data)。 -
@PeterKoltai 您的上一条评论导致了下面的答案。
-
@joe_izn 太好了!
标签: firebase flutter google-cloud-functions