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_firestoreSDK已将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
相关产品推荐
相关产品推荐

