Flutter向Google Cloud Functions传参返回null如何解决
问题排查与修复方案
问题根因
你当前的参数传递和读取逻辑不匹配,Firebase可调用云函数(https.onCall)的入参读取规则如下:
- 若Flutter侧调用
call方法传入的是Map<String, dynamic>类型的键值对,云函数侧才可以通过data.键名读取对应值 - 若传入的是数组、字符串等非键值对类型,云函数侧的
data整体就是你传入的这个值,无法通过自定义属性名读取
你现在Flutter侧传入的是数组['hello'],但云函数侧尝试读取不存在的data.text属性,所以返回null。
修复方案
两种适配方式二选一即可:
方案1:修改Flutter传参逻辑,匹配现有云函数代码
Flutter侧将传参改为键值对,键名对应云函数读取的text属性:
Future<void> getFruit() async { HttpsCallable callable = FirebaseFunctions.instance.httpsCallable('listFruit'); // 传参改为Map类型,键名和云函数读取的字段保持一致 final results = await callable.call({'text': 'hello'}); List fruit = results.data; print(fruit); }
云函数侧代码无需修改,部署后即可返回预期结果。
方案2:修改云函数取参逻辑,匹配现有Flutter传参代码
云函数侧直接读取传入的数组第一个元素即可:
const functions = require("firebase-functions"); exports.listFruit = functions.https.onCall((data, context) => { // data整体就是Flutter传入的['hello']数组,直接取索引0的值 return ["Apple", "Banana", "Cherry", "Date", "Fig", "Grapes", data[0]]; });
Flutter侧代码无需修改,重新部署云函数后即可生效。
注意事项
修改云函数代码后需要等待部署完成再进行测试,避免缓存旧逻辑导致结果不符合预期。
内容的提问来源于stack exchange,提问作者James Han
相关产品推荐
相关产品推荐

