登录成功后我setData。除电话号码外,所有值均为空。之后,该用户可以编辑配置文件并设置displayName和email等字段。 ,但是当用户注销并登录时,所有字段再次为空。
是否可以检查是否已经有值,然后不设置该字段?
Future<void> addUser(UserModel model){
return _db.collection('users').document(model.uid).setData({
'displayName':model.displayName,
'email':model.email,
'phone':model.phone,
'photoUrl':model.photoUrl,
'title':model.title,
'vendorCircle':model.vendorCircle,
'type':model.type,
},merge: true);
}
答案 0 :(得分:0)
在字段上设置null
值正是您要执行的操作:它在该字段上设置null
。 Firestore上没有配置选项可以更改该行为。
您可以做的是在Flutter / Dart边有条件地构建模型。像这样:
var data = {
'displayName':model.displayName,
'email':model.email,
'phone':model.phone,
'photoUrl':model.photoUrl,
'title':model.title,
'vendorCircle':model.vendorCircle,
'type':model.type,
};
data.removeWhere((k,v) => v == null);
_db.collection('users').document(model.uid).setData(data, merge: true);
受此comment on github和removeWhere
method文档的启发。
答案 1 :(得分:0)
解决方案
Future<void> addUser(UserModel model) {
if (model.photoUrl != '' &&
model.email != '' &&
model.displayName != '' &&
model.title != '' &&
model.vendorCircle != '') {
return _db.collection('users').document(model.uid).setData({
'displayName': model.displayName,
'email': model.email,
'phone': model.phone,
'photoUrl': model.photoUrl,
'title': model.title,
'vendorCircle': model.vendorCircle,
'type': model.type,
}, merge: true);
} else if (model.email != '' &&
model.displayName != '' &&
model.vendorCircle != ''){
return _db.collection('users').document(model.uid).setData({
'displayName': model.displayName,
'email': model.email,
'phone': model.phone,
'vendorCircle': model.vendorCircle,
'type':model.type
}, merge: true);
}else{
return _db.collection('users').document(model.uid).setData({
'phone': model.phone,
'type':model.type
}, merge: true);
}
}