首页 > 解决方案 > 将 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
   }
}

}

标签: flutterdartgoogle-cloud-firestore

解决方案


你可以试试这个:

 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);

我使用子地图来强制进行类型转换。


推荐阅读