Cloud Firestore 错误未为“对象”类型定义运算符“[]”。升级到 2.0.0 后?
Posted
技术标签:
【中文标题】Cloud Firestore 错误未为“对象”类型定义运算符“[]”。升级到 2.0.0 后?【英文标题】:Cloud Firestore error The operator '[]' isn't defined for the type 'Object'. after Upgrade to 2.0.0? 【发布时间】:2021-07-27 04:32:44 【问题描述】:这不是旧的 doc.data['field'] 与 doc.data()['field'] 迁移问题......这是新的(对我来说):
以下代码是我的项目中的一个常见示例,在 Flutter with Firebase 的最后 8 个月内运行良好。我正在迁移到 null 安全性,并且在将我的依赖项升级到最新版本时,以下代码返回以下 IDE 错误:“未为类型 'Object' 定义运算符'[]'。”
final CollectionReference openUserList = FirebaseFirestore.instance.collection('openUsers');
final newUser = await openUserList.doc(ownerEmail.toLowerCase()).get();
if (newUser.exists)
return UserEssential(
uid: newUser.data()['uid'],
email: newUser.data()['email'].toString().toLowerCase(),
displayName: newUser.data()['displayName'],
defaultFacility: newUser.data()['facility'] ?? '',
phone: newUser.data()['phone'] ?? '',
);
else
return null;
当我调整到以下内容时,将 newUser 中的位置指定为 newUsers 列表,它会运行:
uid: newUser[0].data()['uid'],
email: newUser[0].data()['email'].toString().toLowerCase(),
displayName: newUser[0].data()['displayName'],
defaultFacility: newUser[0].data()['facility'] ?? '',
phone: newUser[0].data()['phone'] ?? '',
进行更改后没有错误。我没有在 Flutter Fire 上看到或找到任何关于此的文档。 DocumentSnapshot 变成列表了吗?
这是否与 null 安全性、未记录的 firebase 更改以及 IDE 错误或其他问题有关?我的代码示例提取了一个 DocumentSnapshot,因此不能有多个新用户,为什么需要 [0],因为这与我的空安全迁移相吻合,它与许多其他事情一起发生。我担心这实际上是错误的,这是另外一回事,我在浪费时间。
顺便说一句:将 newUser 显式声明为 DocumentSnapshot 不会改变任何内容。
【问题讨论】:
【参考方案1】:好的,在仔细阅读了 FlutterFire 文档和 2.0.0 迁移之后here:
解决方案就是像这样更明确地定义 CollectionReference:
final CollectionReference<Map<String, dynamic>> openUserList = FirebaseFirestore.instance.collection('openUsers');
【讨论】:
并为查询快照等执行此操作,如您在链接中看到的那样。魔术。【参考方案2】:一切都保持不变,但您必须将 <Map<String, dynamic>>
添加到任何云 Firestore 类中,例如,如果您的代码是这样的:
CollectionReference someCollection =
FirebaseFirestore.instance.collection('someCollection');
您必须将其更改为:
CollectionReference<Map<String, dynamic>> someCollection =
FirebaseFirestore.instance.collection('someCollection');
这同样适用于任何类,例如,如果您制作 QuerySnapshot 并且您的代码如下所示:
List<Something> _somethingListFromSnapshot(QuerySnapshot snapshot)
return snapshot.docs.map((doc)
return Something(
something: doc.data()['something'] ?? '',
);
).toList();
你必须把它改成这样:
List<Something> _somethingListFromSnapshot(QuerySnapshot<Map<String, dynamic>> snapshot)
return snapshot.docs.map((doc)
return Something(
something: doc.data()['something'] ?? '',
);
).toList();
如前所述,它适用于任何云 Firestore 类
【讨论】:
以上是关于Cloud Firestore 错误未为“对象”类型定义运算符“[]”。升级到 2.0.0 后?的主要内容,如果未能解决你的问题,请参考以下文章
Flutter Firestore:未为类“Object?”定义运算符“[]”。 - “对象”来自“飞镖:核心”
未为类型“Object Function()”定义运算符“[]”
Flutter cloud_firestore 系统日期对象的设置/警告