GetStream Chat SDK如何为用户添加附加属性
Stream Chat (Flutter/Dart) 用户自定义附加属性实现方案
Stream SDK 的用户模型内置extraData字段专门承载自定义附加属性,不需要提前在后台配置字段规则,直接按以下方式操作即可:
写入自定义属性
初始化用户、更新用户信息时,将所有自定义字段以键值对形式传入extraData参数即可,服务端会自动持久化存储,注意避开内置保留字段名(id/name/image/role/online/created_at等)。// 客户端更新当前用户信息(携带自定义属性) final chatClient = StreamChatClient('YOUR_API_KEY'); await chatClient.updateUser( User( id: 'user_123456', name: '张三', extraData: { 'vip_level': 3, // 会员等级 'is_official_verified': true, // 官方认证标识 'personal_signature': '下班不积极思想有问题', // 个性签名 'register_timestamp': 1690000000, // 注册时间戳 }, ), );如果是服务端批量更新用户信息,逻辑完全一致,将自定义键值对放入用户对象的
extraData字段传参即可。注意普通客户端默认只有更新当前登录用户信息的权限,修改其他用户属性需要走服务端接口,或调整应用权限规则。读取自定义属性
任意场景下拿到User对象后,直接从extraData中按key取值即可,拉取用户列表、查询会话成员时,自定义属性会默认随用户信息返回,不需要额外配置查询参数:// 读取当前用户的自定义属性 final currentUser = chatClient.state.currentUser; final vipLevel = currentUser?.extraData['vip_level'] as int? ?? 0; final isVerified = currentUser?.extraData['is_official_verified'] as bool? ?? false;多端共用同一个Stream应用时,只要自定义字段的key保持一致,所有端(Flutter/Android/iOS/Web)都能正常读取对应值,不存在跨端兼容问题。
注意事项
- 自定义属性的value仅支持基础类型:字符串、数字、布尔值,以及由上述基础类型组成的List/Map,不要传入自定义类实例,否则会出现序列化失败问题
- 自定义字段名不要使用
stream_前缀,该前缀为官方预留字段前缀,可能被内置逻辑覆盖 - 单用户的
extraData总大小不要超过5KB,避免影响用户信息拉取速度
实测不需要在Stream控制台做任何额外配置,首次传入自定义字段后会自动生效,查询用户信息时默认返回所有已存储的自定义字段。
内容的提问来源于stack exchange,提问作者deandrehaijiel
相关产品推荐
相关产品推荐

