bindWsEvents method

void bindWsEvents()

Implementation

void bindWsEvents() {
  _sub?.cancel();
  _sub = _net.ws.eventStream.listen((frame) async {
    if (frame.event != WsEvents.userUpdated) return;
    final payload = frame.payloadMap ?? {};
    final userId = asInt(payload['user_id']);
    // 仅处理本人资料;好友资料变更可由业务自行监听同一事件扩展
    if (_self == null || userId != _self!.id) return;
    _self = _self!.copyWith(
      nickname: asString(payload['nickname'], _self!.nickname),
      avatar: asString(payload['avatar'], _self!.avatar),
      gender: asInt(payload['gender'], _self!.gender),
      motto: asString(payload['motto'], _self!.motto),
      birthday: asString(payload['birthday'], _self!.birthday),
    );
    await _store.setKv(
      LocalStorage.keyUserInfo,
      encodeJsonString(_self!.toJson()),
    );
    _listener?.selfInfoUpdated(_self!);
  });
}