Google cloud firestore 已更新到cloud_firestore 2.2.0,无法找出错误

Google cloud firestore 已更新到cloud_firestore 2.2.0,无法找出错误,google-cloud-firestore,flutter-web,Google Cloud Firestore,Flutter Web,重构我的代码,我更新到 dependencies: flutter: sdk: flutter firebase_core: ^1.2.0 firebase_auth: ^1.2.0 cloud_firestore: ^2.2.0 cloud_functions: ^1.1.0 ... e、 g.cloud_firestore从1.0.4到2.2.0 我有一个用户类 import'包:cloud_firestore/cloud_firestore.dart';

重构我的代码,我更新到

dependencies:
  flutter:
    sdk: flutter
  firebase_core: ^1.2.0
  firebase_auth: ^1.2.0
  cloud_firestore: ^2.2.0
  cloud_functions: ^1.1.0
  ...
e、 g.cloud_firestore从1.0.4到2.2.0

我有一个用户类

import'包:cloud_firestore/cloud_firestore.dart';
导入“package:flatter/widgets.dart”;
导入“包:mypckg/services/database.dart”;
类用户{
最终字符串id;
最终字符串电子邮件;
最终字符串显示名;
最终字符串语言;
附属组织的最终名单;
最后的布尔伊萨明;
最终编辑;
常量用户(
{this.id=“”,
此电子邮件=”,
this.displayName=“”,
此.language=“”,
this.affiliatedOrganizations=const[],
this.isAdmin=false,
this.isEditor=false});
工厂用户。来自FireStore(文档快照文档){
地图数据=文档数据()!;
返回用户(
id:doc.id,
电子邮件:数据['email'],
显示名称:数据['displayName']??“,
语言:数据[“语言”]??“,
附属组织:数据['affiliatedOrganizations']??[],
isAdmin:数据['isAdmin']??错误,
isEditor:数据['isEditor']为假,
);
}
}
然后我想得到一些数据

。。。
var userData=await-DatabaseService(uid:user.uid)
.getUserData()
。然后((value)=>value.data());
local.User fullLocalUser=local.User(
id:user.uid,
电子邮件:user.email,

displayName:userData!['displayName']??“”,//我可以通过以下更改来消除该错误

用户类别:

。。。
类用户{
最终字符串id;
最终字符串电子邮件;
最终字符串显示名;
最终字符串语言;
附属组织的最终名单;
最后的布尔伊萨明;
最终编辑;
常量用户(
{this.id=“”,
此电子邮件=”,
this.displayName=“”,
此.language=“”,
this.affiliatedOrganizations=const[],
this.isAdmin=false,
this.isEditor=false});
User.fromJson(映射json)
:这个(
email:json['email']!作为字符串,
displayName:json['displayName']作为字符串,
语言:json['language']作为字符串,
附属组织:json['affiliatedOrganizations']作为列表,
isAdmin:json['isAdmin']作为bool,
isEditor:json['isEditor']作为bool,
);
映射到JSON(){
返回{
“电子邮件”:电子邮件,
“displayName”:displayName,
"语言":语言,,
“附属组织”:附属组织,
“isAdmin”:isAdmin,
“isEditor”:isEditor,
};
}
工厂用户。来自FireStore(文档快照文档){
打印(“----保理用户----”;
返回用户(
id:doc.id,
电子邮件:doc.get('email')??“,
displayName:doc.get('displayName')??“”,
语言:doc.get('language')??“,
附属组织:doc.get(‘附属组织’)??[],
isAdmin:doc.get('isAdmin')??false,
isEditor:doc.get('isEditor')??false,
);
}
}
数据库服务:

。。。
最终收集引用usersCollection=FirebaseFirestore.instance
.collection('用户')
.带转换器(
fromFirestore:(snapshots,)=>User.fromJson(snapshots.data()!),
toFirestore:(user,)=>user.toJson();
...
未来的getUserData()异步{
打印(“获取用户数据”);
返回userscolection.doc(uid.get();
}
...
在这里我可以使用它:

。。。
var userData=await-DatabaseService(uid:user.uid).getUserData();
local.User fullLocalUser=local.User(
id:user.uid,
电子邮件:user.email,
displayName:userData['displayName']??“,
语言:userData['language']??“,
附属组织:用户数据['affiliatedOrganizations']??[],
isAdmin:(等待用户声明)!['admin']==true,
isEditor:(wait _userClaims)!['editor']==true);
返回fullLocalUser;
...

感谢您的支持,逐步形成了一个有效的解决方案。

尝试使用
Map userData=await DatabaseService…
而不是
var userData=await DatabaseService…
Map userData…结果
返回类型“Map?”不是“FutureOr”,这是闭包上下文所要求的。dart(从\u闭包返回\u无效\u类型\u)
,因此我设置了
Map?userData=wait…
,但这会导致
错误:不能从返回类型为“FutureOr”的函数返回类型为“Object”的值。“”Object”来自“dart:core”。-“Map”来自“dart:core”…然后((value)=>value.data())
并使用
Map userData=wait DatabaseService…
已经尝试过这一点,但结果是
返回类型“Map”不是“FutureOr”,这是闭包上下文所要求的。dart(从闭包返回无效类型)
不应该是
返回userscolection.doc(uid).get();
而不是
getUserData()方法中返回wait userscolection.doc(uid).get();
Error: The operator '[]' isn't defined for the class 'Object'.
 - 'Object' is from 'dart:core'.
Try correcting the operator to an existing operator, or defining a '[]' operator.
          displayName: userData!['displayName'] ?? "",