Kev*_*ang 6 firebase flutter google-cloud-firestore
我想在使用 firebase 电子邮件身份验证完成注册后获取用户模型。但是,当我尝试从 firestore 获取用户模型时,会打印以下错误:
type 'List<dynamic>' is not a subtype of type 'List<String>'
Run Code Online (Sandbox Code Playgroud)
我的用户模型如下
class UserModel {
late String userKey;
late String nickname;
late String email;
late List<String> listItem; // error!!
late GeoFirePoint geoFirePoint;
late bool isPostOn;
late bool isLogin;
late DateTime createdDate;
DocumentReference? reference;
UserModel({
....
});
UserModel.fromJson(Map<String, dynamic> json, this.userKey) // this.reference
: nickname = json[DOC_NICKNAME],
....
createdDate = json[DOC_CREATEDDATE] == null
? DateTime.now().toUtc()
: (json[DOC_CREATEDDATE] as Timestamp).toDate();
UserModel.fromSnapshot(DocumentSnapshot<Map<String, dynamic>> snapshot)
: this.fromJson(snapshot.data()!, snapshot.id);
Map<String, dynamic> toJson() {
var map = <String, dynamic>{};
map[DOC_NICKNAME] = nickname;
....
return map;
}
}
Run Code Online (Sandbox Code Playgroud)
这是从 Firestore 获取用户模型。// 用户服务类
Future<UserModel> getUserModel(String userKey) async {
DocumentReference<Map<String, dynamic>> documentReference =
FirebaseFirestore.instance.collection(COL_USERS).doc(userKey);
final DocumentSnapshot<Map<String, dynamic>> documentSnapshot =
await documentReference.get();
UserModel userModel = UserModel.fromSnapshot(documentSnapshot);
return userModel;
}
Run Code Online (Sandbox Code Playgroud)
// 用户提供者
Future _setNewUser(User? user) async {
if (user != null && user.email != null) {
....
// ! Error
// test 1
// List<String> subjectList = prefs.getStringList(SHARED_SUBJECTS) ?? [];
// test 2
List<String> listItem =
prefs.getStringList(SHARED_ITEM)?.cast<String>() ??
[].cast<String>();
String email = user.email!;
String userKey = user.uid;
UserModel userModel = UserModel(
userKey: "",
listItem: listItem, // error
....
);
// create model and firestore upload
await UserService().createNewUser(userModel.toJson(), userKey);
// get user model, error!!
try {
_userModel = await UserService().getUserModel(userKey);
} catch (e) {
logger.w("get model error: $e");
}
}
}
Run Code Online (Sandbox Code Playgroud)
我应该如何处理列表数据来解决此问题?谢谢你!
小智 10
您必须转换列表:
listItem = List<String>.from(data['listItem'])
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
3649 次 |
最近记录: |