Google Cloud Functions: Return valid JSON
If you want to use the Flutter SDK to invoke a callable function, you need to actually define a callable function. Right now, you're declaring an HTTP function, which is not the same. Please read the documentation for callable functions to learn how to declare and implement a callable.
Instead of this:
functions.https.onRequest(...)
It will look like this:
functions.https.onCall(...)
Then, you return a JavaScript object to convert to JSON, rather than using a response object.
I could find the bug: As soon as you define another region that the default one, the flutter package cloud_functions seems not to be able to find the function anymore:
Works:
export const helloWorld = functions.https.onCall((data, context) => {
return {
message: "Hello World"
}
});
Doesn´t work:
export const helloWorld = functions.region('europe-west1').https.onCall((data, context) => {
return {
message: "Hello World"
}
});
I was having the same problem, and what worked for me was:
(Adding to @Michael 's answer)
When declaring and calling the cloud function, it's important to specify the region in both cases.
My mistake was that I was only setting the region code on the function declaration.
More here: https://firebase.google.com/docs/functions/locations#client-side_location_selection_for_callable_functions.
For Flutter you should specify the region in the region parameter of the singleton CloudFunctions:
CloudFunctions(app: FirebaseApp.instance, region: "europe-west1")