flutter firebase云函数模拟器,调用函数不起作用



我使用firebase模拟器,我的云函数出错了。。。

我这样调用我的函数:

HttpsCallable displayNameAndEmail = FirebaseFunctions.instanceFor(region: 'europe-west1').httpsCallable("displayNameAndEmail");
displayNameAndEmail.call({
'displayName': "$firstName $lastName",
'lang': lang,
'email': email
});
print("nDisplayName6nn");

这是我得到的错误:

[ERROR:flutter/lib/ui/ui_dart_state.cc(199)] Unhandled Exception: [firebase_functions/unavailable] UNAVAILABLE
E/flutter (14049): 
E/flutter (14049): #0      StandardMethodCodec.decodeEnvelope (package:flutter/src/services/message_codecs.dart:597:7)
E/flutter (14049): #1      MethodChannel._invokeMethod (package:flutter/src/services/platform_channel.dart:158:18)
E/flutter (14049): <asynchronous suspension>
E/flutter (14049): #2      MethodChannelHttpsCallable.call (package:cloud_functions_platform_interface/src/method_channel/method_channel_https_callable.dart:22:24)
E/flutter (14049): <asynchronous suspension>
E/flutter (14049): #3      HttpsCallable.call (package:cloud_functions/src/https_callable.dart:34:37)
E/flutter (14049): <asynchronous suspension>
E/flutter (14049): 
E/flutter (14049): #0      MethodChannelHttpsCallable.call (package:cloud_functions_platform_interface/src/method_channel/method_channel_https_callable.dart:38:7)
E/flutter (14049): <asynchronous suspension>
E/flutter (14049): #1      HttpsCallable.call (package:cloud_functions/src/https_callable.dart:34:37)
E/flutter (14049): <asynchronous suspension>
E/flutter (14049): 

知道吗?

第一行创建一个单独的FirebaseFunctions实例(用于指定区域(。正如Frank在第一条评论中指出的那样,您必须指示这个新实例连接到模拟器。

以下是FlutterFire文档,提供了更多详细信息。如果你在安卓系统上:

  • 记得使用10.0.2.2作为主机(使用Android模拟器时需要(
  • 添加
<application android:usesCleartextTraffic="true"/>

至CCD_ 2。这允许与Firebase模拟器之间的纯HTTP通信。

另一个有用的例子是利用dart级联表示法..,如下所示:

String ip = Platform.isAndroid ? '10.0.2.2' : 'localhost';
var instance = FirebaseFunctions.instanceFor(region: 'europe-west1')
..useFunctionsEmulator(origin: 'http://$ip:5001');
HttpsCallable displayNameAndEmail = 
instance.httpsCallable("displayNameAndEmail");

此外,如果您升级到最新版本,FlutterFire团队似乎旨在实现更统一的方法/界面。所有启用模拟器的方法(如useFunctionsEmulator(现在都接受主机和端口作为位置参数(以前只接受一个命名参数origin(。

在我的情况下,我只是那样用过。我还没有编辑XML,也不需要为android设置localhost10.0.2.2。只需添加您所在的地区。

FirebaseFunctions.instanceFor(region: "us-central").useFunctionsEmulator('localhost', 5001);

最新更新