将dart中的地图更新为firestore



用户可以保存自己的姓名和照片。用户可以跳过上传个人资料照片。因此,我已经将用户的数据存储在我的数据库中。所以,我不想在photo.url中设置null。如何为此创建地图?

Future<void> updateUser({String name, String uid, String url}) {
Map<String, dynamic> _map = <String, dynamic>{
'info': {
'name': name
},
};

if (url != null) {
// if user upload profile photo I want to add url to inside `info.photo`
// got an error when try like this
// _map['info']['photo'] = {'url': url};

// this way is replace info, it's mean 'name' key is removed
//  _map['info'] = {
//    'photo': {'url': url}
//  };
}

return _db.collection('users').doc(uid).set(_map, SetOptions(merge: true));

最终的地图应该是这样的,

{
'info':{
'name':name,
'photo':{ // if url is not null
'url':url
}
}

}

你可以试试这个:

Map<String, dynamic> child = <String, dynamic>{'name': 'name'};
Map<String, dynamic> _map = <String, dynamic>{"info": child};
Map<String, dynamic> info = _map["info"];
info.update(
'photo',
(value) => null,
ifAbsent: () => {'url': 'new url'},
);
_map.update('info', (value) => info);
print(_map);

我使用了一个子映射来强制执行类型转换。

使用if可以轻松完成

Map<String, dynamic> _map = <String, dynamic>{
'info': {
'name': name,
if (url != null) 'photo' : {'url': url}
},
};

最新更新