Firebase 云Firestore错误操作员';[]和#x27;isn';t为类型';对象';。升级到2.0.0之后?

Firebase 云Firestore错误操作员';[]和#x27;isn';t为类型';对象';。升级到2.0.0之后?,firebase,flutter,google-cloud-firestore,dart-null-safety,Firebase,Flutter,Google Cloud Firestore,Dart Null Safety,这不是旧的doc.data['field']与doc.data() 下面的代码是我的项目中的一个常见示例,在使用Firebase的Flatter的最后8个mos中运行良好。我正在迁移到空安全,在将依赖项升级到最新版本时,以下代码返回以下IDE错误:“没有为类型“Object”定义运算符“[]” 当我调整到以下情况时,在newUser中指定位置,就像它是一个newUsers列表一样,它会运行: uid: newUser[0].data()['uid'], email: newUse

这不是旧的doc.data['field']与doc.data()

下面的代码是我的项目中的一个常见示例,在使用Firebase的Flatter的最后8个mos中运行良好。我正在迁移到空安全,在将依赖项升级到最新版本时,以下代码返回以下IDE错误:“没有为类型“Object”定义运算符“[]”

当我调整到以下情况时,在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'] ?? '',
更改后没有错误。我没有看到或找到任何关于扑动火的文件。文档快照是否成为一个列表

这是否与空安全、未记录的firebase更改、IDE错误或其他相关?我的代码示例提取了一个DocumentSnapshot,因此不能有多个新用户,为什么需要[0],因为这与我的空安全迁移是一致的,它与许多其他事情一起发生。我担心这实际上是错的,这是另外一回事,我在浪费时间


顺便说一句:显式地将newUser声明为DocumentSnapshot不会改变任何事情。

好的,在仔细阅读FlatterFire文档和2.0.0迁移之后:

解决方案只是更明确地定义CollectionReference,如下所示:

  final CollectionReference<Map<String, dynamic>> openUserList = FirebaseFirestore.instance.collection('openUsers');
final CollectionReference openUserList=firebaseforestore.instance.collection('openUsers');

一切都保持不变,但您必须将
添加到任何cloud Firestore类,例如,如果您的代码如下所示:

CollectionReference someCollection =
      FirebaseFirestore.instance.collection('someCollection');
List<Something> _somethingListFromSnapshot(QuerySnapshot snapshot) {
    return snapshot.docs.map((doc) {
      return Something(
        something: doc.data()['something'] ?? '',
      );
    }).toList();
  }
您必须将其更改为:

CollectionReference<Map<String, dynamic>> someCollection =
      FirebaseFirestore.instance.collection('someCollection');
CollectionReference someCollection=
FirebaseFirestore.instance.collection('someCollection');
这同样适用于任何类,例如,如果您制作了一个QuerySnapshot,并且您的代码如下所示:

CollectionReference someCollection =
      FirebaseFirestore.instance.collection('someCollection');
List<Something> _somethingListFromSnapshot(QuerySnapshot snapshot) {
    return snapshot.docs.map((doc) {
      return Something(
        something: doc.data()['something'] ?? '',
      );
    }).toList();
  }
List\u somethingListFromSnapshot(QuerySnapshot快照){
返回snapshot.docs.map((doc){
归还某物(
something:doc.data(),
);
}).toList();
}
您必须将其更改为:

List<Something> _somethingListFromSnapshot(QuerySnapshot<Map<String, dynamic>> snapshot) {
    return snapshot.docs.map((doc) {
      return Something(
        something: doc.data()['something'] ?? '',
      );
    }).toList();
  }
List\u somethingListFromSnapshot(QuerySnapshot快照){
返回snapshot.docs.map((doc){
归还某物(
something:doc.data(),
);
}).toList();
}

如前所述,它适用于任何cloud Firestore类,并适用于querysnapshot等,如链接中所示。魔术