【问题标题】:Flutter firebase function error : Response is not valid JSON objectFlutter firebase 函数错误:响应不是有效的 JSON 对象
【发布时间】:2021-06-24 01:23:56
【问题描述】:

您好,我尝试通过 Cloud_Functions Pkg 使用 firebase 函数,但在颤振 consel 中出现错误,我尝试在函数中传递参数,即用户的 UID。

Consel 错误:

E/flutter (17871): [ERROR:flutter/lib/ui/ui_dart_state.cc(186)] Unhandled Exception: [firebase_functions/internal] Response is not valid JSON object.
E/flutter (17871): #0      catchPlatformException
package:cloud_functions_platform_interface/…/utils/exception.dart:21
E/flutter (17871): #1      _rootRunBinary (dart:async/zone.dart:1378:47)
E/flutter (17871): #2      _CustomZone.runBinary (dart:async/zone.dart:1272:19)
E/flutter (17871): #3      _FutureListener.handleError (dart:async/future_impl.dart:166:20)
E/flutter (17871): #4      Future._propagateToListeners.handleError (dart:async/future_impl.dart:716:47)
E/flutter (17871): #5      Future._propagateToListeners (dart:async/future_impl.dart:737:24)
E/flutter (17871): #6      Future._completeError (dart:async/future_impl.dart:547:5)
E/flutter (17871): #7      _completeOnAsyncError (dart:async-patch/async_patch.dart:264:13)
E/flutter (17871): #8      MethodChannel._invokeMethod (package:flutter/src/services/platform_channel.dart)
package:flutter/…/services/platform_channel.dart:1
E/flutter (17871): <asynchronous suspension>

Firebse 函数:

exports.helloWorld = functions.https.onCall((data, context) => {
  return data.data()['uid'];
});

来自 Firebase 的 Flutter 运行功能:

    IconButton(
        icon: Icon(Icons.add),
        onPressed: () async {
          HttpsCallable callable =
              FirebaseFunctions.instance.httpsCallable('listFruit');
          final results = await callable.call(<String, dynamic>{
            'uid': '123',
          });
          print(results
              .data.toString()); // ["Apple", "Banana", "Cherry", "Date", "Fig", "Grapes"]
        });

我的目标:

将参数传递给 firebase 函数。

【问题讨论】:

    标签: firebase flutter dart google-cloud-functions


    【解决方案1】:

    代替

    exports.helloWorld = functions.https.onCall((data, context) => {
      return data.data()['uid'];
    });
    

    你应该这样做

    exports.helloWorld = functions.https.onCall((data, context) => {
      return data['uid'];  // Or  data.uid
    });
    

    Callable Cloud Functions doc 中的更多细节。


    另外,请注意您的云函数名为helloWorld,但您使用FirebaseFunctions.instance.httpsCallable('listFruit'); 调用它。所以你应该适应其中一个,例如FirebaseFunctions.instance.httpsCallable('helloWorld');

    【讨论】:

    • 它使用返回数据['uid']; .谢谢你的帮助,
    【解决方案2】:

    我遇到了同样的错误,这是由于没有提供区域,如果该功能未部署在 us-central1 中,则似乎是必需的。按照他们的documentation,您可以像这样执行调用:

    FirebaseFunctions.instanceFor(region: 'europe-west1').httpsCallable('listFruit');
    

    【讨论】:

      猜你喜欢
      • 2021-01-21
      • 2021-03-03
      • 2020-07-26
      • 2019-08-25
      • 2020-08-17
      • 1970-01-01
      • 2022-07-07
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多