【问题标题】:Passing parameters to httpsCallable cloud function from Flutter code从 Flutter 代码向 httpsCallable 云函数传递参数
【发布时间】: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&lt;String, dynamic&gt;

 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&lt;String, dynamic&gt;
  • {...data}
  • &lt;String, dynamic&gt;{...data}

尝试将{"dummy": "data"} 作为参数,CF 正常执行。不知道为什么!
那么应该如何将参数传递给 https 可调用云函数

【问题讨论】:

  • 我不确定,但如果最后一个逗号后面没有任何内容,可能是问题所在,例如"lng": clientLng,"lng": destination.lng, 和最后一个},。尝试删除它们。在 Flutter 中没问题,但可能意味着 JSON 无效。
  • 另一件事:在提交之前尝试jsonEncode(data)
  • @PeterKoltai 您的上一条评论导致了下面的答案。
  • @joe_izn 太好了!

标签: firebase flutter google-cloud-functions


【解决方案1】:

问题出在toJson() 中,特别是在"vehicleType": vehicleType, 中,因为该值是一个枚举属性,并且引发了无效参数异常。

现在使用"vehicleType": vehicleType.index,

【讨论】:

    猜你喜欢
    • 2021-01-24
    • 2021-06-13
    • 2019-06-19
    • 1970-01-01
    • 1970-01-01
    • 2010-10-21
    • 2020-10-01
    • 2021-05-13
    • 1970-01-01
    相关资源
    最近更新 更多