import 'package:json_annotation/json_annotation.dart'; import 'package:stream_chat/src/models/channel_model.dart'; import 'package:stream_chat/src/models/message.dart'; import 'package:stream_chat/src/models/serialization.dart'; import 'package:stream_chat/stream_chat.dart'; part 'event.g.dart'; /// The class that contains the information about an event @JsonSerializable() class Event { /// Constructor used for json serialization Event({ this.type, this.cid, this.connectionId, this.createdAt, this.me, this.user, this.message, this.totalUnreadCount, this.unreadChannels, this.reaction, this.online, this.channel, this.member, this.channelId, this.channelType, this.parentId, this.extraData, }) : isLocal = true; /// Create a new instance from a json factory Event.fromJson(Map json) => _$EventFromJson(Serialization.moveToExtraDataFromRoot( json, topLevelFields, )) ..isLocal = false; /// The type of the event /// [EventType] contains some predefined constant types final String type; /// The channel cid to which the event belongs final String cid; /// The channel id to which the event belongs final String channelId; /// The channel type to which the event belongs final String channelType; /// The connection id in which the event has been sent final String connectionId; /// The date of creation of the event final DateTime createdAt; /// User object of the health check user final OwnUser me; /// User object of the current user final User user; /// The message sent with the event final Message message; /// The channel sent with the event final EventChannel channel; /// The member sent with the event final Member member; /// The reaction sent with the event final Reaction reaction; /// The number of unread messages for current user final int totalUnreadCount; /// User total unread channels final int unreadChannels; /// Online status final bool online; /// The id of the parent message of a thread final String parentId; /// True if the event is generated by this client bool isLocal; /// Map of custom channel extraData @JsonKey(includeIfNull: false) final Map extraData; /// Known top level fields. /// Useful for [Serialization] methods. static final topLevelFields = [ 'type', 'cid', 'connection_id', 'created_at', 'me', 'user', 'message', 'total_unread_count', 'unread_channels', 'reaction', 'online', 'channel', 'member', 'channel_id', 'channel_type', 'parent_id', 'is_local', ]; /// Serialize to json Map toJson() => Serialization.moveFromExtraDataToRoot( _$EventToJson(this), topLevelFields, ); /// Creates a copy of [Event] with specified attributes overridden. Event copyWith({ String type, String cid, String channelId, String channelType, String connectionId, DateTime createdAt, OwnUser me, User user, Message message, EventChannel channel, Member member, Reaction reaction, int totalUnreadCount, int unreadChannels, bool online, String parentId, Map extraData, }) => Event( type: type ?? this.type, cid: cid ?? this.cid, connectionId: connectionId ?? this.connectionId, createdAt: createdAt ?? this.createdAt, me: me ?? this.me, user: user ?? this.user, message: message ?? this.message, totalUnreadCount: totalUnreadCount ?? this.totalUnreadCount, unreadChannels: unreadChannels ?? this.unreadChannels, reaction: reaction ?? this.reaction, online: online ?? this.online, channel: channel ?? this.channel, member: member ?? this.member, channelId: channelId ?? this.channelId, channelType: channelType ?? this.channelType, parentId: parentId ?? this.parentId, extraData: extraData ?? this.extraData, ); } /// The channel embedded in the event object @JsonSerializable() class EventChannel extends ChannelModel { /// Constructor used for json serialization EventChannel({ this.members, String id, String type, String cid, ChannelConfig config, User createdBy, bool frozen, DateTime lastMessageAt, DateTime createdAt, DateTime updatedAt, DateTime deletedAt, int memberCount, Map extraData, }) : super( id: id, type: type, cid: cid, config: config, createdBy: createdBy, frozen: frozen, lastMessageAt: lastMessageAt, createdAt: createdAt, updatedAt: updatedAt, deletedAt: deletedAt, memberCount: memberCount, extraData: extraData, ); /// Create a new instance from a json factory EventChannel.fromJson(Map json) => _$EventChannelFromJson(Serialization.moveToExtraDataFromRoot( json, topLevelFields, )); /// A paginated list of channel members final List members; /// Known top level fields. /// Useful for [Serialization] methods. static final topLevelFields = [ 'members', ...ChannelModel.topLevelFields, ]; /// Serialize to json @override Map toJson() => Serialization.moveFromExtraDataToRoot( _$EventChannelToJson(this), topLevelFields, ); }