import 'package:json_annotation/json_annotation.dart'; import 'package:stream_chat/src/models/device.dart'; import 'package:stream_chat/src/models/mute.dart'; import 'package:stream_chat/src/models/serialization.dart'; import 'package:stream_chat/src/models/user.dart'; part 'own_user.g.dart'; /// The class that defines the own user model /// This object can be found in [Event] @JsonSerializable() class OwnUser extends User { /// Constructor used for json serialization OwnUser({ this.devices = const [], this.mutes = const [], this.totalUnreadCount = 0, this.unreadChannels, this.channelMutes = const [], String id = '', String role = '', DateTime? createdAt, DateTime? updatedAt, DateTime? lastActive, bool online = false, Map extraData = const {}, bool banned = false, }) : super( id: id, role: role, createdAt: createdAt, updatedAt: updatedAt, lastActive: lastActive, online: online, extraData: extraData, banned: banned, ); /// Create a new instance from a json factory OwnUser.fromJson(Map? json) => _$OwnUserFromJson( Serialization.moveToExtraDataFromRoot(json, topLevelFields)!); /// List of user devices @JsonKey( includeIfNull: false, toJson: Serialization.readOnly, defaultValue: []) final List devices; /// List of users muted by the user @JsonKey( includeIfNull: false, toJson: Serialization.readOnly, defaultValue: []) final List mutes; /// List of users muted by the user @JsonKey( includeIfNull: false, toJson: Serialization.readOnly, defaultValue: []) final List channelMutes; /// Total unread messages by the user @JsonKey( includeIfNull: false, toJson: Serialization.readOnly, defaultValue: 0) final int totalUnreadCount; /// Total unread channels by the user @JsonKey(includeIfNull: false, toJson: Serialization.readOnly) final int? unreadChannels; /// Known top level fields. /// Useful for [Serialization] methods. static final topLevelFields = [ 'devices', 'mutes', 'total_unread_count', 'unread_channels', 'channel_mutes', ...User.topLevelFields, ]; /// Serialize to json @override Map toJson() => Serialization.moveFromExtraDataToRoot( _$OwnUserToJson(this), topLevelFields); }