flutter - 将 Dart 中的地图更新到 Firestore
问题描述
用户可以保存他的名字和照片。用户可以跳过上传个人资料照片。所以,我已经将用户的数据存储在我的数据库中。所以,我不想将 null 设置为photo.url
. 如何为此创建地图?
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);
我使用子地图来强制进行类型转换。
推荐阅读
- java - 添加两个可能是 float 或 int 值的字符串
- wix - Wix 工具集 - 创建第二个补丁
- android - 导航抽屉解锁模式被忽略
- c# - C#从excel工作表导入时如何处理列表中的空值
- java - Java创建/覆盖http服务器
- r - 概率密度函数,其中随机变量服从二项分布且概率变化
- android - 发布 React Native 0.55 应用(32 位)的解决方案是什么?考虑到从 8 月 1 日起 Google Play 商店需要 64 位版本的应用程序
- bash - 从 shell 脚本中导出 ROS Master URI
- angular - Angular Routing 的基本延迟加载模块路由问题
- javascript - 使用 sequelize belongsTo 和 hasOne 会导致超过最大调用堆栈大小