You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Flutter 2.5.1使用Firestore报Function expressions can't be named错误如何解决

问题1:getUserById方法报错修复

你当前的写法存在两个核心错误:

  • 箭头函数语法使用错误,=>后需要直接接返回值,若要编写多行逻辑需要改用普通函数体格式;同时.doc(id)返回的是Firestore文档引用对象,不能直接在其后拼接函数体
  • 缺少获取文档数据的.get()异步调用,必须先调用get()拿到文档快照后才能读取data()属性

修正后代码:

Future<UserModel> getUserById(String id) async {
  final doc = await _firestore.collection(collection).doc(id).get();
  print("==========id is $id=============");
  debugPrint("==========NAME is ${doc.data()?['name']}=============");
  // 将返回的文档数据转换为你定义的UserModel实例后返回
  return UserModel.fromJson(doc.data()!);
}

问题2:setData方法报错修复

错误原因:

  • 方法调用语法错误,setData/set是直接接收Map参数的方法,不需要额外加空括号后再传参数
  • 适配Flutter 2.5版本的cloud_firestore SDK已将setData方法重命名为set

修正后代码:

await _firestore.collection(collection).doc(id).set({
  "userId": userId,
  "cart": convertedCart,
  "id": id,
  "total": totalPrice,
  "createdAt": DateTime.now().millisecondsSinceEpoch,
  "description": description,
  "status": status
});

补充注意点

  • 所有Firestore的异步读写操作都需要加await关键字等待执行完成,且操作所在的函数需要标记async
  • 如果你使用的cloud_firestore依赖版本低于2.0.0,可以将上面的set换回setData,参数格式保持不变即可:setData({...})

内容的提问来源于stack exchange,提问作者Dastan Kurdish

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.23 22:57:03