Flutter访问List<UserModal>的displayName报错但属性已定义如何解决?
问题修复方案
错误根因
你在UI层遍历用户列表时误用了变量:
- 你通过Provider获取的
userMod是List<UserModal>类型的用户列表集合,集合本身没有displayName属性 - 你通过
forEach遍历出来的element才是单个UserModal类的实例,displayName是这个实例的属性
修复后的UI层代码
@override Widget build(BuildContext context) { final userMod = Provider.of<List<UserModal>>(context); userMod.forEach((element) { // 将原本的userMod替换为遍历出的单个实例element即可 print(element.displayName); }); // 剩余布局代码保持不变 }
可选优化建议
- 如果你实际只需要获取当前登录用户的信息,不需要返回整个users集合的所有用户列表,可以修改Firebase查询逻辑,根据当前登录用户的uid筛选单条文档,返回
Stream<UserModal?>类型的数据流,避免遍历集合的额外开销 - 转换Firebase文档数据时可以更规范地处理类型,避免直接强转dynamic:
UserModal _singleUserFromSnapshot(DocumentSnapshot doc) { final data = doc.data() as Map<String, dynamic>; return UserModal( userId: data['userId'], email: data['email'], imageUrl: data['imageUrl'], displayName: data['displayName'], gender: data['gender'], age: data['age'], phoneNumber: data['phoneNumber'], ); }
内容的提问来源于stack exchange,提问作者Kaushal Kishore
相关产品推荐
相关产品推荐

