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")