Search code examples
jsonfluttergoogle-cloud-platformgoogle-cloud-functionscloud

Google Cloud Functions: Return valid JSON


I´m trying to call a Google Cloud Function from my Flutter App using the cloud_functions package.

This is my Cloud Function:

export const helloWorld = functions.region('europe-west1').https.onRequest((request, response) => {
response.status(200).json({
    message: "Hello World!"
  });
});

And this is my flutter method that calls this function:

try {
  final dynamic resp =
      await CloudFunctions.instance.call(
    functionName: "helloWorld"
  );
  print(resp);

} on CloudFunctionsException catch (e) {
  ...
} catch (e) {
  ...
} finally {
  ...
}

As you can see it´s the most simply form of a request without any params.

My problem: Each call to the Cloud Function results in a CloudFunctionsException. Reason: "Response is not valid JSON object.".

Maybe somebody has an idea what´s going wrong here? If I call the cloud function via Postman or a browser, a valid JSON Object is returned and no exception is thrown.

Thanks in advance, Michael


Solution

  • 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.