From 6054c30137da7ebd4cf72f844e42bc1af99e3c23 Mon Sep 17 00:00:00 2001 From: Sahil Kumar Date: Wed, 19 Jan 2022 18:57:56 +0530 Subject: [PATCH 01/17] feat(persistence): Use hard-coded drift versions. Signed-off-by: xsahil03x --- .../lib/src/db/drift_chat_database.g.dart | 321 ++++++++++++------ packages/stream_chat_persistence/pubspec.yaml | 4 +- 2 files changed, 216 insertions(+), 109 deletions(-) diff --git a/packages/stream_chat_persistence/lib/src/db/drift_chat_database.g.dart b/packages/stream_chat_persistence/lib/src/db/drift_chat_database.g.dart index bd735b8b..d0565973 100644 --- a/packages/stream_chat_persistence/lib/src/db/drift_chat_database.g.dart +++ b/packages/stream_chat_persistence/lib/src/db/drift_chat_database.g.dart @@ -394,66 +394,78 @@ class $ChannelsTable extends Channels final String? _alias; $ChannelsTable(this._db, [this._alias]); final VerificationMeta _idMeta = const VerificationMeta('id'); + @override late final GeneratedColumn id = GeneratedColumn( 'id', aliasedName, false, - typeName: 'TEXT', requiredDuringInsert: true); + type: const StringType(), requiredDuringInsert: true); final VerificationMeta _typeMeta = const VerificationMeta('type'); + @override late final GeneratedColumn type = GeneratedColumn( 'type', aliasedName, false, - typeName: 'TEXT', requiredDuringInsert: true); + type: const StringType(), requiredDuringInsert: true); final VerificationMeta _cidMeta = const VerificationMeta('cid'); + @override late final GeneratedColumn cid = GeneratedColumn( 'cid', aliasedName, false, - typeName: 'TEXT', requiredDuringInsert: true); + type: const StringType(), requiredDuringInsert: true); final VerificationMeta _configMeta = const VerificationMeta('config'); + @override late final GeneratedColumnWithTypeConverter, String?> config = GeneratedColumn('config', aliasedName, false, - typeName: 'TEXT', requiredDuringInsert: true) + type: const StringType(), requiredDuringInsert: true) .withConverter>($ChannelsTable.$converter0); final VerificationMeta _frozenMeta = const VerificationMeta('frozen'); + @override late final GeneratedColumn frozen = GeneratedColumn( 'frozen', aliasedName, false, - typeName: 'INTEGER', + type: const BoolType(), requiredDuringInsert: false, defaultConstraints: 'CHECK (frozen IN (0, 1))', defaultValue: const Constant(false)); final VerificationMeta _lastMessageAtMeta = const VerificationMeta('lastMessageAt'); + @override late final GeneratedColumn lastMessageAt = GeneratedColumn('last_message_at', aliasedName, true, - typeName: 'INTEGER', requiredDuringInsert: false); + type: const IntType(), requiredDuringInsert: false); final VerificationMeta _createdAtMeta = const VerificationMeta('createdAt'); + @override late final GeneratedColumn createdAt = GeneratedColumn( 'created_at', aliasedName, false, - typeName: 'INTEGER', + type: const IntType(), requiredDuringInsert: false, defaultValue: currentDateAndTime); final VerificationMeta _updatedAtMeta = const VerificationMeta('updatedAt'); + @override late final GeneratedColumn updatedAt = GeneratedColumn( 'updated_at', aliasedName, false, - typeName: 'INTEGER', + type: const IntType(), requiredDuringInsert: false, defaultValue: currentDateAndTime); final VerificationMeta _deletedAtMeta = const VerificationMeta('deletedAt'); + @override late final GeneratedColumn deletedAt = GeneratedColumn( 'deleted_at', aliasedName, true, - typeName: 'INTEGER', requiredDuringInsert: false); + type: const IntType(), requiredDuringInsert: false); final VerificationMeta _memberCountMeta = const VerificationMeta('memberCount'); + @override late final GeneratedColumn memberCount = GeneratedColumn( 'member_count', aliasedName, false, - typeName: 'INTEGER', + type: const IntType(), requiredDuringInsert: false, defaultValue: const Constant(0)); final VerificationMeta _createdByIdMeta = const VerificationMeta('createdById'); + @override late final GeneratedColumn createdById = GeneratedColumn( 'created_by_id', aliasedName, true, - typeName: 'TEXT', requiredDuringInsert: false); + type: const StringType(), requiredDuringInsert: false); final VerificationMeta _extraDataMeta = const VerificationMeta('extraData'); + @override late final GeneratedColumnWithTypeConverter, String?> extraData = GeneratedColumn('extra_data', aliasedName, true, - typeName: 'TEXT', requiredDuringInsert: false) + type: const StringType(), requiredDuringInsert: false) .withConverter>($ChannelsTable.$converter1); @override List get $columns => [ @@ -1329,140 +1341,165 @@ class $MessagesTable extends Messages final String? _alias; $MessagesTable(this._db, [this._alias]); final VerificationMeta _idMeta = const VerificationMeta('id'); + @override late final GeneratedColumn id = GeneratedColumn( 'id', aliasedName, false, - typeName: 'TEXT', requiredDuringInsert: true); + type: const StringType(), requiredDuringInsert: true); final VerificationMeta _messageTextMeta = const VerificationMeta('messageText'); + @override late final GeneratedColumn messageText = GeneratedColumn( 'message_text', aliasedName, true, - typeName: 'TEXT', requiredDuringInsert: false); + type: const StringType(), requiredDuringInsert: false); final VerificationMeta _attachmentsMeta = const VerificationMeta('attachments'); + @override late final GeneratedColumnWithTypeConverter, String?> attachments = GeneratedColumn('attachments', aliasedName, false, - typeName: 'TEXT', requiredDuringInsert: true) + type: const StringType(), requiredDuringInsert: true) .withConverter>($MessagesTable.$converter0); final VerificationMeta _statusMeta = const VerificationMeta('status'); + @override late final GeneratedColumnWithTypeConverter status = GeneratedColumn('status', aliasedName, false, - typeName: 'INTEGER', + type: const IntType(), requiredDuringInsert: false, defaultValue: const Constant(1)) .withConverter($MessagesTable.$converter1); final VerificationMeta _typeMeta = const VerificationMeta('type'); + @override late final GeneratedColumn type = GeneratedColumn( 'type', aliasedName, false, - typeName: 'TEXT', + type: const StringType(), requiredDuringInsert: false, defaultValue: const Constant('regular')); final VerificationMeta _mentionedUsersMeta = const VerificationMeta('mentionedUsers'); + @override late final GeneratedColumnWithTypeConverter, String?> mentionedUsers = GeneratedColumn( 'mentioned_users', aliasedName, false, - typeName: 'TEXT', requiredDuringInsert: true) + type: const StringType(), requiredDuringInsert: true) .withConverter>($MessagesTable.$converter2); final VerificationMeta _reactionCountsMeta = const VerificationMeta('reactionCounts'); + @override late final GeneratedColumnWithTypeConverter, String?> reactionCounts = GeneratedColumn( 'reaction_counts', aliasedName, true, - typeName: 'TEXT', requiredDuringInsert: false) + type: const StringType(), requiredDuringInsert: false) .withConverter>($MessagesTable.$converter3); final VerificationMeta _reactionScoresMeta = const VerificationMeta('reactionScores'); + @override late final GeneratedColumnWithTypeConverter, String?> reactionScores = GeneratedColumn( 'reaction_scores', aliasedName, true, - typeName: 'TEXT', requiredDuringInsert: false) + type: const StringType(), requiredDuringInsert: false) .withConverter>($MessagesTable.$converter4); final VerificationMeta _parentIdMeta = const VerificationMeta('parentId'); + @override late final GeneratedColumn parentId = GeneratedColumn( 'parent_id', aliasedName, true, - typeName: 'TEXT', requiredDuringInsert: false); + type: const StringType(), requiredDuringInsert: false); final VerificationMeta _quotedMessageIdMeta = const VerificationMeta('quotedMessageId'); + @override late final GeneratedColumn quotedMessageId = GeneratedColumn('quoted_message_id', aliasedName, true, - typeName: 'TEXT', requiredDuringInsert: false); + type: const StringType(), requiredDuringInsert: false); final VerificationMeta _replyCountMeta = const VerificationMeta('replyCount'); + @override late final GeneratedColumn replyCount = GeneratedColumn( 'reply_count', aliasedName, true, - typeName: 'INTEGER', requiredDuringInsert: false); + type: const IntType(), requiredDuringInsert: false); final VerificationMeta _showInChannelMeta = const VerificationMeta('showInChannel'); + @override late final GeneratedColumn showInChannel = GeneratedColumn( 'show_in_channel', aliasedName, true, - typeName: 'INTEGER', + type: const BoolType(), requiredDuringInsert: false, defaultConstraints: 'CHECK (show_in_channel IN (0, 1))'); final VerificationMeta _shadowedMeta = const VerificationMeta('shadowed'); + @override late final GeneratedColumn shadowed = GeneratedColumn( 'shadowed', aliasedName, false, - typeName: 'INTEGER', + type: const BoolType(), requiredDuringInsert: false, defaultConstraints: 'CHECK (shadowed IN (0, 1))', defaultValue: const Constant(false)); final VerificationMeta _commandMeta = const VerificationMeta('command'); + @override late final GeneratedColumn command = GeneratedColumn( 'command', aliasedName, true, - typeName: 'TEXT', requiredDuringInsert: false); + type: const StringType(), requiredDuringInsert: false); final VerificationMeta _createdAtMeta = const VerificationMeta('createdAt'); + @override late final GeneratedColumn createdAt = GeneratedColumn( 'created_at', aliasedName, false, - typeName: 'INTEGER', + type: const IntType(), requiredDuringInsert: false, defaultValue: currentDateAndTime); final VerificationMeta _updatedAtMeta = const VerificationMeta('updatedAt'); + @override late final GeneratedColumn updatedAt = GeneratedColumn( 'updated_at', aliasedName, false, - typeName: 'INTEGER', + type: const IntType(), requiredDuringInsert: false, defaultValue: currentDateAndTime); final VerificationMeta _deletedAtMeta = const VerificationMeta('deletedAt'); + @override late final GeneratedColumn deletedAt = GeneratedColumn( 'deleted_at', aliasedName, true, - typeName: 'INTEGER', requiredDuringInsert: false); + type: const IntType(), requiredDuringInsert: false); final VerificationMeta _userIdMeta = const VerificationMeta('userId'); + @override late final GeneratedColumn userId = GeneratedColumn( 'user_id', aliasedName, true, - typeName: 'TEXT', requiredDuringInsert: false); + type: const StringType(), requiredDuringInsert: false); final VerificationMeta _pinnedMeta = const VerificationMeta('pinned'); + @override late final GeneratedColumn pinned = GeneratedColumn( 'pinned', aliasedName, false, - typeName: 'INTEGER', + type: const BoolType(), requiredDuringInsert: false, defaultConstraints: 'CHECK (pinned IN (0, 1))', defaultValue: const Constant(false)); final VerificationMeta _pinnedAtMeta = const VerificationMeta('pinnedAt'); + @override late final GeneratedColumn pinnedAt = GeneratedColumn( 'pinned_at', aliasedName, true, - typeName: 'INTEGER', requiredDuringInsert: false); + type: const IntType(), requiredDuringInsert: false); final VerificationMeta _pinExpiresMeta = const VerificationMeta('pinExpires'); + @override late final GeneratedColumn pinExpires = GeneratedColumn( 'pin_expires', aliasedName, true, - typeName: 'INTEGER', requiredDuringInsert: false); + type: const IntType(), requiredDuringInsert: false); final VerificationMeta _pinnedByUserIdMeta = const VerificationMeta('pinnedByUserId'); + @override late final GeneratedColumn pinnedByUserId = GeneratedColumn( 'pinned_by_user_id', aliasedName, true, - typeName: 'TEXT', requiredDuringInsert: false); + type: const StringType(), requiredDuringInsert: false); final VerificationMeta _channelCidMeta = const VerificationMeta('channelCid'); + @override late final GeneratedColumn channelCid = GeneratedColumn( 'channel_cid', aliasedName, false, - typeName: 'TEXT', + type: const StringType(), requiredDuringInsert: true, $customConstraints: 'REFERENCES channels(cid) ON DELETE CASCADE'); final VerificationMeta _i18nMeta = const VerificationMeta('i18n'); + @override late final GeneratedColumnWithTypeConverter, String?> i18n = GeneratedColumn('i18n', aliasedName, true, - typeName: 'TEXT', requiredDuringInsert: false) + type: const StringType(), requiredDuringInsert: false) .withConverter>($MessagesTable.$converter5); final VerificationMeta _extraDataMeta = const VerificationMeta('extraData'); + @override late final GeneratedColumnWithTypeConverter, String?> extraData = GeneratedColumn('extra_data', aliasedName, true, - typeName: 'TEXT', requiredDuringInsert: false) + type: const StringType(), requiredDuringInsert: false) .withConverter>($MessagesTable.$converter6); @override List get $columns => [ @@ -2409,141 +2446,166 @@ class $PinnedMessagesTable extends PinnedMessages final String? _alias; $PinnedMessagesTable(this._db, [this._alias]); final VerificationMeta _idMeta = const VerificationMeta('id'); + @override late final GeneratedColumn id = GeneratedColumn( 'id', aliasedName, false, - typeName: 'TEXT', requiredDuringInsert: true); + type: const StringType(), requiredDuringInsert: true); final VerificationMeta _messageTextMeta = const VerificationMeta('messageText'); + @override late final GeneratedColumn messageText = GeneratedColumn( 'message_text', aliasedName, true, - typeName: 'TEXT', requiredDuringInsert: false); + type: const StringType(), requiredDuringInsert: false); final VerificationMeta _attachmentsMeta = const VerificationMeta('attachments'); + @override late final GeneratedColumnWithTypeConverter, String?> attachments = GeneratedColumn('attachments', aliasedName, false, - typeName: 'TEXT', requiredDuringInsert: true) + type: const StringType(), requiredDuringInsert: true) .withConverter>($PinnedMessagesTable.$converter0); final VerificationMeta _statusMeta = const VerificationMeta('status'); + @override late final GeneratedColumnWithTypeConverter status = GeneratedColumn('status', aliasedName, false, - typeName: 'INTEGER', + type: const IntType(), requiredDuringInsert: false, defaultValue: const Constant(1)) .withConverter( $PinnedMessagesTable.$converter1); final VerificationMeta _typeMeta = const VerificationMeta('type'); + @override late final GeneratedColumn type = GeneratedColumn( 'type', aliasedName, false, - typeName: 'TEXT', + type: const StringType(), requiredDuringInsert: false, defaultValue: const Constant('regular')); final VerificationMeta _mentionedUsersMeta = const VerificationMeta('mentionedUsers'); + @override late final GeneratedColumnWithTypeConverter, String?> mentionedUsers = GeneratedColumn( 'mentioned_users', aliasedName, false, - typeName: 'TEXT', requiredDuringInsert: true) + type: const StringType(), requiredDuringInsert: true) .withConverter>($PinnedMessagesTable.$converter2); final VerificationMeta _reactionCountsMeta = const VerificationMeta('reactionCounts'); + @override late final GeneratedColumnWithTypeConverter, String?> reactionCounts = GeneratedColumn( 'reaction_counts', aliasedName, true, - typeName: 'TEXT', requiredDuringInsert: false) + type: const StringType(), requiredDuringInsert: false) .withConverter>($PinnedMessagesTable.$converter3); final VerificationMeta _reactionScoresMeta = const VerificationMeta('reactionScores'); + @override late final GeneratedColumnWithTypeConverter, String?> reactionScores = GeneratedColumn( 'reaction_scores', aliasedName, true, - typeName: 'TEXT', requiredDuringInsert: false) + type: const StringType(), requiredDuringInsert: false) .withConverter>($PinnedMessagesTable.$converter4); final VerificationMeta _parentIdMeta = const VerificationMeta('parentId'); + @override late final GeneratedColumn parentId = GeneratedColumn( 'parent_id', aliasedName, true, - typeName: 'TEXT', requiredDuringInsert: false); + type: const StringType(), requiredDuringInsert: false); final VerificationMeta _quotedMessageIdMeta = const VerificationMeta('quotedMessageId'); + @override late final GeneratedColumn quotedMessageId = GeneratedColumn('quoted_message_id', aliasedName, true, - typeName: 'TEXT', requiredDuringInsert: false); + type: const StringType(), requiredDuringInsert: false); final VerificationMeta _replyCountMeta = const VerificationMeta('replyCount'); + @override late final GeneratedColumn replyCount = GeneratedColumn( 'reply_count', aliasedName, true, - typeName: 'INTEGER', requiredDuringInsert: false); + type: const IntType(), requiredDuringInsert: false); final VerificationMeta _showInChannelMeta = const VerificationMeta('showInChannel'); + @override late final GeneratedColumn showInChannel = GeneratedColumn( 'show_in_channel', aliasedName, true, - typeName: 'INTEGER', + type: const BoolType(), requiredDuringInsert: false, defaultConstraints: 'CHECK (show_in_channel IN (0, 1))'); final VerificationMeta _shadowedMeta = const VerificationMeta('shadowed'); + @override late final GeneratedColumn shadowed = GeneratedColumn( 'shadowed', aliasedName, false, - typeName: 'INTEGER', + type: const BoolType(), requiredDuringInsert: false, defaultConstraints: 'CHECK (shadowed IN (0, 1))', defaultValue: const Constant(false)); final VerificationMeta _commandMeta = const VerificationMeta('command'); + @override late final GeneratedColumn command = GeneratedColumn( 'command', aliasedName, true, - typeName: 'TEXT', requiredDuringInsert: false); + type: const StringType(), requiredDuringInsert: false); final VerificationMeta _createdAtMeta = const VerificationMeta('createdAt'); + @override late final GeneratedColumn createdAt = GeneratedColumn( 'created_at', aliasedName, false, - typeName: 'INTEGER', + type: const IntType(), requiredDuringInsert: false, defaultValue: currentDateAndTime); final VerificationMeta _updatedAtMeta = const VerificationMeta('updatedAt'); + @override late final GeneratedColumn updatedAt = GeneratedColumn( 'updated_at', aliasedName, false, - typeName: 'INTEGER', + type: const IntType(), requiredDuringInsert: false, defaultValue: currentDateAndTime); final VerificationMeta _deletedAtMeta = const VerificationMeta('deletedAt'); + @override late final GeneratedColumn deletedAt = GeneratedColumn( 'deleted_at', aliasedName, true, - typeName: 'INTEGER', requiredDuringInsert: false); + type: const IntType(), requiredDuringInsert: false); final VerificationMeta _userIdMeta = const VerificationMeta('userId'); + @override late final GeneratedColumn userId = GeneratedColumn( 'user_id', aliasedName, true, - typeName: 'TEXT', requiredDuringInsert: false); + type: const StringType(), requiredDuringInsert: false); final VerificationMeta _pinnedMeta = const VerificationMeta('pinned'); + @override late final GeneratedColumn pinned = GeneratedColumn( 'pinned', aliasedName, false, - typeName: 'INTEGER', + type: const BoolType(), requiredDuringInsert: false, defaultConstraints: 'CHECK (pinned IN (0, 1))', defaultValue: const Constant(false)); final VerificationMeta _pinnedAtMeta = const VerificationMeta('pinnedAt'); + @override late final GeneratedColumn pinnedAt = GeneratedColumn( 'pinned_at', aliasedName, true, - typeName: 'INTEGER', requiredDuringInsert: false); + type: const IntType(), requiredDuringInsert: false); final VerificationMeta _pinExpiresMeta = const VerificationMeta('pinExpires'); + @override late final GeneratedColumn pinExpires = GeneratedColumn( 'pin_expires', aliasedName, true, - typeName: 'INTEGER', requiredDuringInsert: false); + type: const IntType(), requiredDuringInsert: false); final VerificationMeta _pinnedByUserIdMeta = const VerificationMeta('pinnedByUserId'); + @override late final GeneratedColumn pinnedByUserId = GeneratedColumn( 'pinned_by_user_id', aliasedName, true, - typeName: 'TEXT', requiredDuringInsert: false); + type: const StringType(), requiredDuringInsert: false); final VerificationMeta _channelCidMeta = const VerificationMeta('channelCid'); + @override late final GeneratedColumn channelCid = GeneratedColumn( 'channel_cid', aliasedName, false, - typeName: 'TEXT', + type: const StringType(), requiredDuringInsert: true, $customConstraints: 'REFERENCES channels(cid) ON DELETE CASCADE'); final VerificationMeta _i18nMeta = const VerificationMeta('i18n'); + @override late final GeneratedColumnWithTypeConverter, String?> i18n = GeneratedColumn('i18n', aliasedName, true, - typeName: 'TEXT', requiredDuringInsert: false) + type: const StringType(), requiredDuringInsert: false) .withConverter>($PinnedMessagesTable.$converter5); final VerificationMeta _extraDataMeta = const VerificationMeta('extraData'); + @override late final GeneratedColumnWithTypeConverter, String?> extraData = GeneratedColumn('extra_data', aliasedName, true, - typeName: 'TEXT', requiredDuringInsert: false) + type: const StringType(), requiredDuringInsert: false) .withConverter>( $PinnedMessagesTable.$converter6); @override @@ -2947,35 +3009,41 @@ class $PinnedMessageReactionsTable extends PinnedMessageReactions final String? _alias; $PinnedMessageReactionsTable(this._db, [this._alias]); final VerificationMeta _userIdMeta = const VerificationMeta('userId'); + @override late final GeneratedColumn userId = GeneratedColumn( 'user_id', aliasedName, false, - typeName: 'TEXT', requiredDuringInsert: true); + type: const StringType(), requiredDuringInsert: true); final VerificationMeta _messageIdMeta = const VerificationMeta('messageId'); + @override late final GeneratedColumn messageId = GeneratedColumn( 'message_id', aliasedName, false, - typeName: 'TEXT', + type: const StringType(), requiredDuringInsert: true, $customConstraints: 'REFERENCES pinned_messages(id) ON DELETE CASCADE'); final VerificationMeta _typeMeta = const VerificationMeta('type'); + @override late final GeneratedColumn type = GeneratedColumn( 'type', aliasedName, false, - typeName: 'TEXT', requiredDuringInsert: true); + type: const StringType(), requiredDuringInsert: true); final VerificationMeta _createdAtMeta = const VerificationMeta('createdAt'); + @override late final GeneratedColumn createdAt = GeneratedColumn( 'created_at', aliasedName, false, - typeName: 'INTEGER', + type: const IntType(), requiredDuringInsert: false, defaultValue: currentDateAndTime); final VerificationMeta _scoreMeta = const VerificationMeta('score'); + @override late final GeneratedColumn score = GeneratedColumn( 'score', aliasedName, false, - typeName: 'INTEGER', + type: const IntType(), requiredDuringInsert: false, defaultValue: const Constant(0)); final VerificationMeta _extraDataMeta = const VerificationMeta('extraData'); + @override late final GeneratedColumnWithTypeConverter, String?> extraData = GeneratedColumn('extra_data', aliasedName, true, - typeName: 'TEXT', requiredDuringInsert: false) + type: const StringType(), requiredDuringInsert: false) .withConverter>( $PinnedMessageReactionsTable.$converter0); @override @@ -3270,35 +3338,41 @@ class $ReactionsTable extends Reactions final String? _alias; $ReactionsTable(this._db, [this._alias]); final VerificationMeta _userIdMeta = const VerificationMeta('userId'); + @override late final GeneratedColumn userId = GeneratedColumn( 'user_id', aliasedName, false, - typeName: 'TEXT', requiredDuringInsert: true); + type: const StringType(), requiredDuringInsert: true); final VerificationMeta _messageIdMeta = const VerificationMeta('messageId'); + @override late final GeneratedColumn messageId = GeneratedColumn( 'message_id', aliasedName, false, - typeName: 'TEXT', + type: const StringType(), requiredDuringInsert: true, $customConstraints: 'REFERENCES messages(id) ON DELETE CASCADE'); final VerificationMeta _typeMeta = const VerificationMeta('type'); + @override late final GeneratedColumn type = GeneratedColumn( 'type', aliasedName, false, - typeName: 'TEXT', requiredDuringInsert: true); + type: const StringType(), requiredDuringInsert: true); final VerificationMeta _createdAtMeta = const VerificationMeta('createdAt'); + @override late final GeneratedColumn createdAt = GeneratedColumn( 'created_at', aliasedName, false, - typeName: 'INTEGER', + type: const IntType(), requiredDuringInsert: false, defaultValue: currentDateAndTime); final VerificationMeta _scoreMeta = const VerificationMeta('score'); + @override late final GeneratedColumn score = GeneratedColumn( 'score', aliasedName, false, - typeName: 'INTEGER', + type: const IntType(), requiredDuringInsert: false, defaultValue: const Constant(0)); final VerificationMeta _extraDataMeta = const VerificationMeta('extraData'); + @override late final GeneratedColumnWithTypeConverter, String?> extraData = GeneratedColumn('extra_data', aliasedName, true, - typeName: 'TEXT', requiredDuringInsert: false) + type: const StringType(), requiredDuringInsert: false) .withConverter>($ReactionsTable.$converter0); @override List get $columns => @@ -3666,51 +3740,60 @@ class $UsersTable extends Users with TableInfo<$UsersTable, UserEntity> { final String? _alias; $UsersTable(this._db, [this._alias]); final VerificationMeta _idMeta = const VerificationMeta('id'); + @override late final GeneratedColumn id = GeneratedColumn( 'id', aliasedName, false, - typeName: 'TEXT', requiredDuringInsert: true); + type: const StringType(), requiredDuringInsert: true); final VerificationMeta _roleMeta = const VerificationMeta('role'); + @override late final GeneratedColumn role = GeneratedColumn( 'role', aliasedName, true, - typeName: 'TEXT', requiredDuringInsert: false); + type: const StringType(), requiredDuringInsert: false); final VerificationMeta _languageMeta = const VerificationMeta('language'); + @override late final GeneratedColumn language = GeneratedColumn( 'language', aliasedName, true, - typeName: 'TEXT', requiredDuringInsert: false); + type: const StringType(), requiredDuringInsert: false); final VerificationMeta _createdAtMeta = const VerificationMeta('createdAt'); + @override late final GeneratedColumn createdAt = GeneratedColumn( 'created_at', aliasedName, false, - typeName: 'INTEGER', + type: const IntType(), requiredDuringInsert: false, defaultValue: currentDateAndTime); final VerificationMeta _updatedAtMeta = const VerificationMeta('updatedAt'); + @override late final GeneratedColumn updatedAt = GeneratedColumn( 'updated_at', aliasedName, false, - typeName: 'INTEGER', + type: const IntType(), requiredDuringInsert: false, defaultValue: currentDateAndTime); final VerificationMeta _lastActiveMeta = const VerificationMeta('lastActive'); + @override late final GeneratedColumn lastActive = GeneratedColumn( 'last_active', aliasedName, true, - typeName: 'INTEGER', requiredDuringInsert: false); + type: const IntType(), requiredDuringInsert: false); final VerificationMeta _onlineMeta = const VerificationMeta('online'); + @override late final GeneratedColumn online = GeneratedColumn( 'online', aliasedName, false, - typeName: 'INTEGER', + type: const BoolType(), requiredDuringInsert: false, defaultConstraints: 'CHECK (online IN (0, 1))', defaultValue: const Constant(false)); final VerificationMeta _bannedMeta = const VerificationMeta('banned'); + @override late final GeneratedColumn banned = GeneratedColumn( 'banned', aliasedName, false, - typeName: 'INTEGER', + type: const BoolType(), requiredDuringInsert: false, defaultConstraints: 'CHECK (banned IN (0, 1))', defaultValue: const Constant(false)); final VerificationMeta _extraDataMeta = const VerificationMeta('extraData'); + @override late final GeneratedColumnWithTypeConverter, String?> extraData = GeneratedColumn('extra_data', aliasedName, false, - typeName: 'TEXT', requiredDuringInsert: true) + type: const StringType(), requiredDuringInsert: true) .withConverter>($UsersTable.$converter0); @override List get $columns => [ @@ -4156,69 +4239,80 @@ class $MembersTable extends Members final String? _alias; $MembersTable(this._db, [this._alias]); final VerificationMeta _userIdMeta = const VerificationMeta('userId'); + @override late final GeneratedColumn userId = GeneratedColumn( 'user_id', aliasedName, false, - typeName: 'TEXT', requiredDuringInsert: true); + type: const StringType(), requiredDuringInsert: true); final VerificationMeta _channelCidMeta = const VerificationMeta('channelCid'); + @override late final GeneratedColumn channelCid = GeneratedColumn( 'channel_cid', aliasedName, false, - typeName: 'TEXT', + type: const StringType(), requiredDuringInsert: true, $customConstraints: 'REFERENCES channels(cid) ON DELETE CASCADE'); final VerificationMeta _roleMeta = const VerificationMeta('role'); + @override late final GeneratedColumn role = GeneratedColumn( 'role', aliasedName, true, - typeName: 'TEXT', requiredDuringInsert: false); + type: const StringType(), requiredDuringInsert: false); final VerificationMeta _inviteAcceptedAtMeta = const VerificationMeta('inviteAcceptedAt'); + @override late final GeneratedColumn inviteAcceptedAt = GeneratedColumn('invite_accepted_at', aliasedName, true, - typeName: 'INTEGER', requiredDuringInsert: false); + type: const IntType(), requiredDuringInsert: false); final VerificationMeta _inviteRejectedAtMeta = const VerificationMeta('inviteRejectedAt'); + @override late final GeneratedColumn inviteRejectedAt = GeneratedColumn('invite_rejected_at', aliasedName, true, - typeName: 'INTEGER', requiredDuringInsert: false); + type: const IntType(), requiredDuringInsert: false); final VerificationMeta _invitedMeta = const VerificationMeta('invited'); + @override late final GeneratedColumn invited = GeneratedColumn( 'invited', aliasedName, false, - typeName: 'INTEGER', + type: const BoolType(), requiredDuringInsert: false, defaultConstraints: 'CHECK (invited IN (0, 1))', defaultValue: const Constant(false)); final VerificationMeta _bannedMeta = const VerificationMeta('banned'); + @override late final GeneratedColumn banned = GeneratedColumn( 'banned', aliasedName, false, - typeName: 'INTEGER', + type: const BoolType(), requiredDuringInsert: false, defaultConstraints: 'CHECK (banned IN (0, 1))', defaultValue: const Constant(false)); final VerificationMeta _shadowBannedMeta = const VerificationMeta('shadowBanned'); + @override late final GeneratedColumn shadowBanned = GeneratedColumn( 'shadow_banned', aliasedName, false, - typeName: 'INTEGER', + type: const BoolType(), requiredDuringInsert: false, defaultConstraints: 'CHECK (shadow_banned IN (0, 1))', defaultValue: const Constant(false)); final VerificationMeta _isModeratorMeta = const VerificationMeta('isModerator'); + @override late final GeneratedColumn isModerator = GeneratedColumn( 'is_moderator', aliasedName, false, - typeName: 'INTEGER', + type: const BoolType(), requiredDuringInsert: false, defaultConstraints: 'CHECK (is_moderator IN (0, 1))', defaultValue: const Constant(false)); final VerificationMeta _createdAtMeta = const VerificationMeta('createdAt'); + @override late final GeneratedColumn createdAt = GeneratedColumn( 'created_at', aliasedName, false, - typeName: 'INTEGER', + type: const IntType(), requiredDuringInsert: false, defaultValue: currentDateAndTime); final VerificationMeta _updatedAtMeta = const VerificationMeta('updatedAt'); + @override late final GeneratedColumn updatedAt = GeneratedColumn( 'updated_at', aliasedName, false, - typeName: 'INTEGER', + type: const IntType(), requiredDuringInsert: false, defaultValue: currentDateAndTime); @override @@ -4495,24 +4589,28 @@ class $ReadsTable extends Reads with TableInfo<$ReadsTable, ReadEntity> { final String? _alias; $ReadsTable(this._db, [this._alias]); final VerificationMeta _lastReadMeta = const VerificationMeta('lastRead'); + @override late final GeneratedColumn lastRead = GeneratedColumn( 'last_read', aliasedName, false, - typeName: 'INTEGER', requiredDuringInsert: true); + type: const IntType(), requiredDuringInsert: true); final VerificationMeta _userIdMeta = const VerificationMeta('userId'); + @override late final GeneratedColumn userId = GeneratedColumn( 'user_id', aliasedName, false, - typeName: 'TEXT', requiredDuringInsert: true); + type: const StringType(), requiredDuringInsert: true); final VerificationMeta _channelCidMeta = const VerificationMeta('channelCid'); + @override late final GeneratedColumn channelCid = GeneratedColumn( 'channel_cid', aliasedName, false, - typeName: 'TEXT', + type: const StringType(), requiredDuringInsert: true, $customConstraints: 'REFERENCES channels(cid) ON DELETE CASCADE'); final VerificationMeta _unreadMessagesMeta = const VerificationMeta('unreadMessages'); + @override late final GeneratedColumn unreadMessages = GeneratedColumn( 'unread_messages', aliasedName, false, - typeName: 'INTEGER', + type: const IntType(), requiredDuringInsert: false, defaultValue: const Constant(0)); @override @@ -4695,13 +4793,15 @@ class $ChannelQueriesTable extends ChannelQueries final String? _alias; $ChannelQueriesTable(this._db, [this._alias]); final VerificationMeta _queryHashMeta = const VerificationMeta('queryHash'); + @override late final GeneratedColumn queryHash = GeneratedColumn( 'query_hash', aliasedName, false, - typeName: 'TEXT', requiredDuringInsert: true); + type: const StringType(), requiredDuringInsert: true); final VerificationMeta _channelCidMeta = const VerificationMeta('channelCid'); + @override late final GeneratedColumn channelCid = GeneratedColumn( 'channel_cid', aliasedName, false, - typeName: 'TEXT', requiredDuringInsert: true); + type: const StringType(), requiredDuringInsert: true); @override List get $columns => [queryHash, channelCid]; @override @@ -5009,38 +5109,45 @@ class $ConnectionEventsTable extends ConnectionEvents final String? _alias; $ConnectionEventsTable(this._db, [this._alias]); final VerificationMeta _idMeta = const VerificationMeta('id'); + @override late final GeneratedColumn id = GeneratedColumn( 'id', aliasedName, false, - typeName: 'INTEGER', requiredDuringInsert: false); + type: const IntType(), requiredDuringInsert: false); final VerificationMeta _typeMeta = const VerificationMeta('type'); + @override late final GeneratedColumn type = GeneratedColumn( 'type', aliasedName, false, - typeName: 'TEXT', requiredDuringInsert: true); + type: const StringType(), requiredDuringInsert: true); final VerificationMeta _ownUserMeta = const VerificationMeta('ownUser'); + @override late final GeneratedColumnWithTypeConverter, String?> ownUser = GeneratedColumn('own_user', aliasedName, true, - typeName: 'TEXT', requiredDuringInsert: false) + type: const StringType(), requiredDuringInsert: false) .withConverter>( $ConnectionEventsTable.$converter0); final VerificationMeta _totalUnreadCountMeta = const VerificationMeta('totalUnreadCount'); + @override late final GeneratedColumn totalUnreadCount = GeneratedColumn( 'total_unread_count', aliasedName, true, - typeName: 'INTEGER', requiredDuringInsert: false); + type: const IntType(), requiredDuringInsert: false); final VerificationMeta _unreadChannelsMeta = const VerificationMeta('unreadChannels'); + @override late final GeneratedColumn unreadChannels = GeneratedColumn( 'unread_channels', aliasedName, true, - typeName: 'INTEGER', requiredDuringInsert: false); + type: const IntType(), requiredDuringInsert: false); final VerificationMeta _lastEventAtMeta = const VerificationMeta('lastEventAt'); + @override late final GeneratedColumn lastEventAt = GeneratedColumn('last_event_at', aliasedName, true, - typeName: 'INTEGER', requiredDuringInsert: false); + type: const IntType(), requiredDuringInsert: false); final VerificationMeta _lastSyncAtMeta = const VerificationMeta('lastSyncAt'); + @override late final GeneratedColumn lastSyncAt = GeneratedColumn( 'last_sync_at', aliasedName, true, - typeName: 'INTEGER', requiredDuringInsert: false); + type: const IntType(), requiredDuringInsert: false); @override List get $columns => [ id, diff --git a/packages/stream_chat_persistence/pubspec.yaml b/packages/stream_chat_persistence/pubspec.yaml index 3bf970d3..a66eef54 100644 --- a/packages/stream_chat_persistence/pubspec.yaml +++ b/packages/stream_chat_persistence/pubspec.yaml @@ -10,7 +10,7 @@ environment: flutter: ">=1.17.0" dependencies: - drift: ^1.0.0 + drift: 1.3.0 flutter: sdk: flutter logging: ^1.0.1 @@ -24,7 +24,7 @@ dependencies: dev_dependencies: build_runner: ^2.0.1 dart_code_metrics: ^4.4.0 - drift_dev: ^1.0.0 + drift_dev: 1.3.0 flutter_test: sdk: flutter mocktail: ^0.2.0 From d8f4c12de32c50ddc82e367ce13657f1d70ff921 Mon Sep 17 00:00:00 2001 From: Sahil Kumar Date: Wed, 19 Jan 2022 19:01:58 +0530 Subject: [PATCH 02/17] chore(persistence): update CHANGELOG.md Signed-off-by: xsahil03x --- packages/stream_chat_persistence/CHANGELOG.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/packages/stream_chat_persistence/CHANGELOG.md b/packages/stream_chat_persistence/CHANGELOG.md index f8a2434f..74e460c7 100644 --- a/packages/stream_chat_persistence/CHANGELOG.md +++ b/packages/stream_chat_persistence/CHANGELOG.md @@ -1,3 +1,7 @@ +## Upcoming + +- Bump `drift` to `1.3.0`. + ## 3.0.0 - Updated `stream_chat` dependency to [`3.0.0`](https://pub.dev/packages/stream_chat/changelog). From 5a5a40886274cf4c8ac9a8760908e8d4140ebc79 Mon Sep 17 00:00:00 2001 From: Koichiro Oishi Date: Sun, 23 Jan 2022 20:32:27 +0900 Subject: [PATCH 03/17] fix(localization): fix japanese translations --- .../stream_chat_localizations/CHANGELOG.md | 6 ++++ .../lib/src/stream_chat_localizations_ja.dart | 32 +++++++++---------- 2 files changed, 22 insertions(+), 16 deletions(-) diff --git a/packages/stream_chat_localizations/CHANGELOG.md b/packages/stream_chat_localizations/CHANGELOG.md index c1c469bf..b1f010dd 100644 --- a/packages/stream_chat_localizations/CHANGELOG.md +++ b/packages/stream_chat_localizations/CHANGELOG.md @@ -1,3 +1,9 @@ +## 2.1.0 + +🔄 Changed + +* Some of the `Japanese` translations have been updated/changed for better understanding. + ## 2.0.0 - Updated `stream_chat_flutter` dependency to [`3.0.0`](https://pub.dev/packages/stream_chat_flutter/changelog). diff --git a/packages/stream_chat_localizations/lib/src/stream_chat_localizations_ja.dart b/packages/stream_chat_localizations/lib/src/stream_chat_localizations_ja.dart index 8b58630d..3b28d867 100644 --- a/packages/stream_chat_localizations/lib/src/stream_chat_localizations_ja.dart +++ b/packages/stream_chat_localizations/lib/src/stream_chat_localizations_ja.dart @@ -38,7 +38,7 @@ class StreamChatLocalizationsJa extends GlobalStreamChatLocalizations { String get threadReplyLabel => 'スレッド返信'; @override - String get onlyVisibleToYouText => '自分しか見れません'; + String get onlyVisibleToYouText => '自分にのみ見えます'; @override String threadReplyCountText(int count) => '$countつのスレッド返信'; @@ -48,7 +48,7 @@ class StreamChatLocalizationsJa extends GlobalStreamChatLocalizations { required int remaining, required int total, }) => - '$remaining/${total}mbのアップロード中 。。。'; + '$remaining/${total}mbのアップロード中…'; @override String pinnedByUserText({ @@ -82,7 +82,7 @@ class StreamChatLocalizationsJa extends GlobalStreamChatLocalizations { String get messageReactionsLabel => 'メッセージのリアクション'; @override - String get emptyChatMessagesText => 'チャットがありませんが。。。'; + String get emptyChatMessagesText => 'まだメッセージはありません…'; @override String threadSeparatorText(int replyCount) => '$replyCount件の返信'; @@ -94,7 +94,7 @@ class StreamChatLocalizationsJa extends GlobalStreamChatLocalizations { String get disconnectedLabel => '接続切れ'; @override - String get reconnectingLabel => '再接続中。。。'; + String get reconnectingLabel => '再接続中…'; @override String get alsoSendAsDirectMessageLabel => 'ダイレクトメッセージでも送信'; @@ -115,7 +115,7 @@ class StreamChatLocalizationsJa extends GlobalStreamChatLocalizations { String fileTooLargeAfterCompressionError(double limitInMB) => 'ファイルのサイズが大きすぎてアップロードできません。' 'ファイルサイズの制限は${limitInMB}MBです。' - '圧縮してみましたが、十分ではありませんでした。'; + '圧縮を試しましたがサイズをオーバーしました'; @override String fileTooLargeError(double limitInMB) => @@ -143,7 +143,7 @@ class StreamChatLocalizationsJa extends GlobalStreamChatLocalizations { String get videoFromCameraLabel => 'カメラからの動画'; @override - String get okLabel => 'よし'; + String get okLabel => 'OK'; @override String get somethingWentWrongError => 'エラーが発生しました'; @@ -180,7 +180,7 @@ class StreamChatLocalizationsJa extends GlobalStreamChatLocalizations { String get deleteLabel => '削除'; @override - String get deleteMessageLabel => 'メッセージを削除する '; + String get deleteMessageLabel => 'メッセージを削除する'; @override String get deleteMessageQuestion => 'このメッセージ' @@ -195,7 +195,7 @@ class StreamChatLocalizationsJa extends GlobalStreamChatLocalizations { @override String togglePinUnpinText({required bool pinned}) { if (pinned) return '会話のピンを外す'; - return '会話にピンする'; + return '会話をピンする'; } @override @@ -246,7 +246,7 @@ class StreamChatLocalizationsJa extends GlobalStreamChatLocalizations { String get yesterdayLabel => '昨日'; @override - String get channelIsMutedText => 'チャンネルが無音されています'; + String get channelIsMutedText => 'チャンネルがミュートされています'; @override String get noTitleText => 'タイトル無し'; @@ -255,7 +255,7 @@ class StreamChatLocalizationsJa extends GlobalStreamChatLocalizations { String get letsStartChattingLabel => 'チャットを始めよう!'; @override - String get sendingFirstMessageLabel => '友人に最初のメッセージを送りましょうか?'; + String get sendingFirstMessageLabel => '最初のメッセージを送ってみましょう'; @override String get startAChatLabel => 'チャットを開始する'; @@ -276,7 +276,7 @@ class StreamChatLocalizationsJa extends GlobalStreamChatLocalizations { String get searchingForNetworkText => 'ネットワークを検索中'; @override - String get offlineLabel => 'オフライン。。。'; + String get offlineLabel => 'オフライン…'; @override String get tryAgainLabel => '再試行する'; @@ -291,16 +291,16 @@ class StreamChatLocalizationsJa extends GlobalStreamChatLocalizations { String get viewInfoLabel => '情報を見る'; @override - String get leaveGroupLabel => 'グループを離れる'; + String get leaveGroupLabel => 'グループから退出する'; @override - String get leaveLabel => '離れる'; + String get leaveLabel => '退出する'; @override - String get leaveConversationLabel => '会話を離れる'; + String get leaveConversationLabel => '会話から退出する'; @override - String get leaveConversationQuestion => '本当に会話を離れますか?'; + String get leaveConversationQuestion => '本当に会話から退出しますか?'; @override String get showInChatLabel => 'チャットで表示'; @@ -315,7 +315,7 @@ class StreamChatLocalizationsJa extends GlobalStreamChatLocalizations { String get uploadErrorLabel => 'アップロードエラー'; @override - String get giphyLabel => 'ギフィー'; + String get giphyLabel => 'GIPHY'; @override String get shuffleLabel => 'ミックス'; From be54f4e61053e1322ef230edb2d1595c84571a27 Mon Sep 17 00:00:00 2001 From: Sahil Kumar Date: Mon, 24 Jan 2022 15:17:50 +0530 Subject: [PATCH 04/17] fix(ui): fix cast error while compressing video. Signed-off-by: xsahil03x --- packages/stream_chat_flutter/lib/src/message_input.dart | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/packages/stream_chat_flutter/lib/src/message_input.dart b/packages/stream_chat_flutter/lib/src/message_input.dart index de2b9d09..a43359ee 100644 --- a/packages/stream_chat_flutter/lib/src/message_input.dart +++ b/packages/stream_chat_flutter/lib/src/message_input.dart @@ -1129,13 +1129,14 @@ class MessageInputState extends State { if (file.size! > widget.maxAttachmentSize) { if (medium.type == AssetType.video && file.path != null) { - final mediaInfo = await (VideoService.compressVideo( + final mediaInfo = await VideoService.compressVideo( file.path!, frameRate: widget.compressedVideoFrameRate, quality: widget.compressedVideoQuality, - ) as FutureOr); + ); - if (mediaInfo.filesize! > widget.maxAttachmentSize) { + if (mediaInfo == null || + mediaInfo.filesize! > widget.maxAttachmentSize) { _showErrorAlert( context.translations.fileTooLargeAfterCompressionError( widget.maxAttachmentSize / (1024 * 1024), From 32d946da2a512df7dfe758ab9ae850ea57f286b0 Mon Sep 17 00:00:00 2001 From: Sahil Kumar Date: Mon, 24 Jan 2022 15:19:37 +0530 Subject: [PATCH 05/17] chore(ui): Update CHANGELOG.md. Signed-off-by: xsahil03x --- packages/stream_chat_flutter/CHANGELOG.md | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/packages/stream_chat_flutter/CHANGELOG.md b/packages/stream_chat_flutter/CHANGELOG.md index 8980e7af..135ee46c 100644 --- a/packages/stream_chat_flutter/CHANGELOG.md +++ b/packages/stream_chat_flutter/CHANGELOG.md @@ -2,8 +2,9 @@ 🐞 Fixed -- SVG rendering fixes -- Use file extension instead of mimeType for downloading files +- SVG rendering fixes. +- Use file extension instead of mimeType for downloading files. +- [[#860]](https://github.com/GetStream/stream-chat-flutter/issues/860) CastError while compressing Videos. ✅ Added @@ -23,7 +24,7 @@ 🐞 Fixed -- [[#766]]`AttachmentActionsModal` now has customisation options for actions. +- [[#766]](https://github.com/GetStream/stream-chat-flutter/issues/766) `AttachmentActionsModal` now has customisation options for actions. - Fixed `MessageWidget` null errors associated with `channel.memberCount`. - Fixed adding attachments on web. - [[#767]](https://github.com/GetStream/stream-chat-flutter/issues/767): Fix `MessageInput` focus behaviour when sending messages. From bb3f48d42f1c4e93d76a283676d86af5ec96dd46 Mon Sep 17 00:00:00 2001 From: Sahil Kumar Date: Mon, 24 Jan 2022 16:22:28 +0530 Subject: [PATCH 06/17] fix(core): Replaced all `StreamController.add()` with `.safeAdd()` to fix bad state errors. Signed-off-by: xsahil03x --- .../stream_chat_flutter_core/CHANGELOG.md | 1 + .../lib/src/channels_bloc.dart | 22 ++++++++--------- .../lib/src/message_search_bloc.dart | 15 ++++++------ .../lib/src/stream_channel.dart | 24 +++++++++---------- .../lib/src/stream_controller_extension.dart | 18 ++++++++++++++ .../lib/src/users_bloc.dart | 17 +++++++------ 6 files changed, 58 insertions(+), 39 deletions(-) create mode 100644 packages/stream_chat_flutter_core/lib/src/stream_controller_extension.dart diff --git a/packages/stream_chat_flutter_core/CHANGELOG.md b/packages/stream_chat_flutter_core/CHANGELOG.md index 99d3a3c2..894ac8da 100644 --- a/packages/stream_chat_flutter_core/CHANGELOG.md +++ b/packages/stream_chat_flutter_core/CHANGELOG.md @@ -3,6 +3,7 @@ 🐞 Fixed - Do not move a channel to top if the new message is from a thread. +- [[#848]](https://github.com/GetStream/stream-chat-flutter/issues/848) Fixed "Bad state: Cannot add new events after calling close" by replacing all `.add` methods with a new `.safeAdd`. ## 3.3.1 diff --git a/packages/stream_chat_flutter_core/lib/src/channels_bloc.dart b/packages/stream_chat_flutter_core/lib/src/channels_bloc.dart index f0065bcb..fa19a90f 100644 --- a/packages/stream_chat_flutter_core/lib/src/channels_bloc.dart +++ b/packages/stream_chat_flutter_core/lib/src/channels_bloc.dart @@ -1,11 +1,11 @@ import 'dart:async'; -import 'package:flutter/foundation.dart'; import 'package:flutter/material.dart'; import 'package:rxdart/rxdart.dart'; import 'package:stream_chat/stream_chat.dart'; import 'package:stream_chat_flutter_core/src/channel_list_core.dart'; import 'package:stream_chat_flutter_core/src/stream_chat_core.dart'; +import 'package:stream_chat_flutter_core/src/stream_controller_extension.dart'; /// Widget dedicated to the management of a channel list with pagination /// [ChannelsBloc] is used together with [ChannelListCore] to manage a list of @@ -116,7 +116,7 @@ class ChannelsBlocState extends State } if (_channelsController.hasValue) { - _queryChannelsLoadingController.add(true); + _queryChannelsLoadingController.safeAdd(true); } try { @@ -135,14 +135,14 @@ class ChannelsBlocState extends State )) { newChannels = channels; if (clear) { - _channelsController.add(channels); + _channelsController.safeAdd(channels); } else { final temp = oldChannels + channels; - _channelsController.add(temp); + _channelsController.safeAdd(temp); } if (_channelsController.hasValue && _queryChannelsLoadingController.value) { - _queryChannelsLoadingController.sink.add(false); + _queryChannelsLoadingController.safeAdd(false); } } if (newChannels.isEmpty || newChannels.length < paginationParams.limit) { @@ -150,11 +150,11 @@ class ChannelsBlocState extends State } } catch (e, stk) { // reset loading controller - _queryChannelsLoadingController.sink.add(false); + _queryChannelsLoadingController.safeAdd(false); if (_channelsController.hasValue) { - _queryChannelsLoadingController.addError(e, stk); + _queryChannelsLoadingController.safeAddError(e, stk); } else { - _channelsController.addError(e, stk); + _channelsController.safeAddError(e, stk); } } } @@ -200,7 +200,7 @@ class ChannelsBlocState extends State if (widget.channelsComparator != null) { newChannels.sort(widget.channelsComparator); } - _channelsController.add(newChannels); + _channelsController.safeAdd(newChannels); })); } @@ -212,7 +212,7 @@ class ChannelsBlocState extends State if (channelIndex > -1) { final channel = newChannels.removeAt(channelIndex); _hiddenChannels.add(channel); - _channelsController.add(newChannels); + _channelsController.safeAdd(newChannels); } })) ..add(client @@ -222,7 +222,7 @@ class ChannelsBlocState extends State ) .listen((e) { final channel = e.channel; - _channelsController.add(List.from( + _channelsController.safeAdd(List.from( (channels ?? [])..removeWhere((c) => c.cid == channel?.cid), )); })); diff --git a/packages/stream_chat_flutter_core/lib/src/message_search_bloc.dart b/packages/stream_chat_flutter_core/lib/src/message_search_bloc.dart index e247a1cf..96a761c1 100644 --- a/packages/stream_chat_flutter_core/lib/src/message_search_bloc.dart +++ b/packages/stream_chat_flutter_core/lib/src/message_search_bloc.dart @@ -2,6 +2,7 @@ import 'package:flutter/material.dart'; import 'package:rxdart/rxdart.dart'; import 'package:stream_chat/stream_chat.dart'; import 'package:stream_chat_flutter_core/src/stream_chat_core.dart'; +import 'package:stream_chat_flutter_core/src/stream_controller_extension.dart'; /// [MessageSearchBloc] is used to manage a list of messages with pagination. /// This class can be used to load messages, perform queries, etc. @@ -95,7 +96,7 @@ class MessageSearchBlocState extends State } if (_messageResponses.hasValue) { - _queryMessagesLoadingController.add(true); + _queryMessagesLoadingController.safeAdd(true); } try { final oldMessages = List.from(messageResponses ?? []); @@ -120,24 +121,24 @@ class MessageSearchBlocState extends State final newMessages = response.results; if (clear) { - _messageResponses.add(newMessages); + _messageResponses.safeAdd(newMessages); } else { final temp = oldMessages + newMessages; - _messageResponses.add(temp); + _messageResponses.safeAdd(temp); } if (_messageResponses.hasValue && _queryMessagesLoadingController.value) { - _queryMessagesLoadingController.add(false); + _queryMessagesLoadingController.safeAdd(false); } if (newMessages.isEmpty || newMessages.length < pagination.limit) { _paginationEnded = true; } } catch (e, stk) { // reset loading controller - _queryMessagesLoadingController.add(false); + _queryMessagesLoadingController.safeAdd(false); if (_messageResponses.hasValue) { - _queryMessagesLoadingController.addError(e, stk); + _queryMessagesLoadingController.safeAddError(e, stk); } else { - _messageResponses.addError(e, stk); + _messageResponses.safeAddError(e, stk); } } } diff --git a/packages/stream_chat_flutter_core/lib/src/stream_channel.dart b/packages/stream_chat_flutter_core/lib/src/stream_channel.dart index 633c3137..bcfb613e 100644 --- a/packages/stream_chat_flutter_core/lib/src/stream_channel.dart +++ b/packages/stream_chat_flutter_core/lib/src/stream_channel.dart @@ -1,10 +1,10 @@ import 'dart:async'; import 'package:collection/collection.dart'; -import 'package:flutter/foundation.dart'; import 'package:flutter/material.dart'; import 'package:rxdart/rxdart.dart'; import 'package:stream_chat/stream_chat.dart'; +import 'package:stream_chat_flutter_core/src/stream_controller_extension.dart'; /// Specifies query direction for pagination enum QueryDirection { @@ -92,10 +92,10 @@ class StreamChannelState extends State { channel.state == null) { return; } - _queryTopMessagesController.add(true); + _queryTopMessagesController.safeAdd(true); if (channel.state!.messages.isEmpty) { - return _queryTopMessagesController.add(false); + return _queryTopMessagesController.safeAdd(false); } final oldestMessage = channel.state!.messages.first; @@ -109,9 +109,9 @@ class StreamChannelState extends State { if (state.messages.isEmpty || state.messages.length < limit) { _topPaginationEnded = true; } - _queryTopMessagesController.add(false); + _queryTopMessagesController.safeAdd(false); } catch (e, stk) { - _queryTopMessagesController.addError(e, stk); + _queryTopMessagesController.safeAddError(e, stk); } } @@ -123,10 +123,10 @@ class StreamChannelState extends State { _queryBottomMessagesController.value || channel.state == null || channel.state!.isUpToDate) return; - _queryBottomMessagesController.add(true); + _queryBottomMessagesController.safeAdd(true); if (channel.state!.messages.isEmpty) { - return _queryBottomMessagesController.add(false); + return _queryBottomMessagesController.safeAdd(false); } final recentMessage = channel.state!.messages.last; @@ -140,9 +140,9 @@ class StreamChannelState extends State { if (state.messages.isEmpty || state.messages.length < limit) { _bottomPaginationEnded = true; } - _queryBottomMessagesController.add(false); + _queryBottomMessagesController.safeAdd(false); } catch (e, stk) { - _queryBottomMessagesController.addError(e, stk); + _queryBottomMessagesController.safeAddError(e, stk); } } @@ -166,7 +166,7 @@ class StreamChannelState extends State { if (_topPaginationEnded || _queryTopMessagesController.value || channel.state == null) return; - _queryTopMessagesController.add(true); + _queryTopMessagesController.safeAdd(true); Message? message; if (channel.state!.threads.containsKey(parentId)) { @@ -188,9 +188,9 @@ class StreamChannelState extends State { if (response.messages.isEmpty || response.messages.length < limit) { _topPaginationEnded = true; } - _queryTopMessagesController.add(false); + _queryTopMessagesController.safeAdd(false); } catch (e, stk) { - _queryTopMessagesController.addError(e, stk); + _queryTopMessagesController.safeAddError(e, stk); } } diff --git a/packages/stream_chat_flutter_core/lib/src/stream_controller_extension.dart b/packages/stream_chat_flutter_core/lib/src/stream_controller_extension.dart new file mode 100644 index 00000000..3720b752 --- /dev/null +++ b/packages/stream_chat_flutter_core/lib/src/stream_controller_extension.dart @@ -0,0 +1,18 @@ +import 'dart:async'; + +/// Extension on [StreamController] to safely add events and errors. +extension StreamControllerX on StreamController { + /// Safely adds the event to the controller, + /// Returns early if the controller is closed. + void safeAdd(T event) { + if (isClosed) return; + add(event); + } + + /// Safely adds the error to the controller, + /// Returns early if the controller is closed. + void safeAddError(Object error, [StackTrace? stackTrace]) { + if (isClosed) return; + addError(error, stackTrace); + } +} diff --git a/packages/stream_chat_flutter_core/lib/src/users_bloc.dart b/packages/stream_chat_flutter_core/lib/src/users_bloc.dart index fc791cd8..e0a09116 100644 --- a/packages/stream_chat_flutter_core/lib/src/users_bloc.dart +++ b/packages/stream_chat_flutter_core/lib/src/users_bloc.dart @@ -1,7 +1,6 @@ -import 'package:flutter/foundation.dart'; import 'package:flutter/material.dart'; import 'package:rxdart/rxdart.dart'; -import 'package:stream_chat/stream_chat.dart'; +import 'package:stream_chat_flutter_core/src/stream_controller_extension.dart'; import 'package:stream_chat_flutter_core/stream_chat_flutter_core.dart'; /// Widget dedicated to the management of a users list with pagination. @@ -82,7 +81,7 @@ class UsersBlocState extends State } if (_usersController.hasValue) { - _queryUsersLoadingController.add(true); + _queryUsersLoadingController.safeAdd(true); } try { @@ -97,24 +96,24 @@ class UsersBlocState extends State final newUsers = usersResponse.users; if (clear) { - _usersController.add(usersResponse.users); + _usersController.safeAdd(usersResponse.users); } else { final temp = oldUsers + usersResponse.users; - _usersController.add(temp); + _usersController.safeAdd(temp); } if (_usersController.hasValue && _queryUsersLoadingController.value) { - _queryUsersLoadingController.add(false); + _queryUsersLoadingController.safeAdd(false); } if (newUsers.isEmpty || newUsers.length < pagination.limit) { _paginationEnded = true; } } catch (e, stk) { // reset loading controller - _queryUsersLoadingController.add(false); + _queryUsersLoadingController.safeAdd(false); if (_usersController.hasValue) { - _queryUsersLoadingController.addError(e, stk); + _queryUsersLoadingController.safeAddError(e, stk); } else { - _usersController.addError(e, stk); + _usersController.safeAddError(e, stk); } } } From aac83f081dc023c561b2b355feb4781210692b71 Mon Sep 17 00:00:00 2001 From: Deven Joshi Date: Mon, 24 Jan 2022 18:03:02 +0530 Subject: [PATCH 07/17] fix: thread message deletion --- packages/stream_chat/CHANGELOG.md | 4 ++++ packages/stream_chat/lib/src/client/channel.dart | 8 +++++++- 2 files changed, 11 insertions(+), 1 deletion(-) diff --git a/packages/stream_chat/CHANGELOG.md b/packages/stream_chat/CHANGELOG.md index 2e22b549..577a4d53 100644 --- a/packages/stream_chat/CHANGELOG.md +++ b/packages/stream_chat/CHANGELOG.md @@ -9,6 +9,10 @@ - Added `client.enrichUrl` endpoint for enriching URLs with metadata. - Fixed `unreadCount` after removing user from a channel. +🐞 Fixed + +- [[#871]](https://github.com/GetStream/stream-chat-flutter/issues/871) Fixed thread message deletion. + ## 3.3.1 🐞 Fixed diff --git a/packages/stream_chat/lib/src/client/channel.dart b/packages/stream_chat/lib/src/client/channel.dart index 258122a7..9075f5d0 100644 --- a/packages/stream_chat/lib/src/client/channel.dart +++ b/packages/stream_chat/lib/src/client/channel.dart @@ -1730,7 +1730,13 @@ class ChannelClientState { if (replyCount == null || replyCount == 0) return; addMessage(parentMessage.copyWith(replyCount: replyCount - 1)); - updateThreadInfo(parentId, threads[parentId]!..remove(message)); + updateThreadInfo( + parentId, + threads[parentId]! + ..removeWhere( + (e) => e.id == message.id, + ), + ); } else { // Remove regular message final allMessages = [...messages]; From aaddccdeac4e0ffc4d34544f7acd359127341ec3 Mon Sep 17 00:00:00 2001 From: Sahil Kumar Date: Wed, 26 Jan 2022 15:20:07 +0530 Subject: [PATCH 08/17] fix(llc): include `message.user` while saving users in persistence. Signed-off-by: xsahil03x --- packages/stream_chat/lib/src/db/chat_persistence_client.dart | 1 + 1 file changed, 1 insertion(+) diff --git a/packages/stream_chat/lib/src/db/chat_persistence_client.dart b/packages/stream_chat/lib/src/db/chat_persistence_client.dart index 98f6a364..82ba181a 100644 --- a/packages/stream_chat/lib/src/db/chat_persistence_client.dart +++ b/packages/stream_chat/lib/src/db/chat_persistence_client.dart @@ -253,6 +253,7 @@ abstract class ChatPersistenceClient { users.addAll([ channel.createdBy, + ...messages.map((it) => it.user), ...reads.map((it) => it.user), ...members.map((it) => it.user), ...reactions.map((it) => it.user), From 9b15dbd2993c92bcfb5a1d44258f33dce06f15f9 Mon Sep 17 00:00:00 2001 From: Sahil Kumar Date: Wed, 26 Jan 2022 15:22:43 +0530 Subject: [PATCH 09/17] chore(llc): update CHANGELOG.md Signed-off-by: xsahil03x --- packages/stream_chat/CHANGELOG.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/packages/stream_chat/CHANGELOG.md b/packages/stream_chat/CHANGELOG.md index 2e22b549..886a3b48 100644 --- a/packages/stream_chat/CHANGELOG.md +++ b/packages/stream_chat/CHANGELOG.md @@ -1,5 +1,9 @@ ## Upcoming +🐞 Fixed + +- [[#748]](https://github.com/GetStream/stream-chat-flutter/issues/748) `Message.user` are now also included while saving users in persistence. + 🔄 Changed - `client.location` is now deprecated in favor of the new [edge server](https://getstream.io/blog/chat-edge-infrastructure) and will be removed in v4.0.0. From 1b6051a38d787d38182682410e7db07a1fe13c6f Mon Sep 17 00:00:00 2001 From: Sahil Kumar Date: Mon, 31 Jan 2022 12:52:43 +0530 Subject: [PATCH 10/17] feat(llc): Add `queryBannedUsers` endpoint. Signed-off-by: xsahil03x --- .../stream_chat/lib/src/client/channel.dart | 15 ++++ .../stream_chat/lib/src/client/client.dart | 12 +++ .../lib/src/core/api/moderation_api.dart | 24 +++++- .../lib/src/core/api/responses.dart | 13 +++ .../lib/src/core/api/responses.g.dart | 9 +++ .../lib/src/core/models/banned_user.dart | 80 +++++++++++++++++++ .../lib/src/core/models/banned_user.g.dart | 36 +++++++++ 7 files changed, 188 insertions(+), 1 deletion(-) create mode 100644 packages/stream_chat/lib/src/core/models/banned_user.dart create mode 100644 packages/stream_chat/lib/src/core/models/banned_user.g.dart diff --git a/packages/stream_chat/lib/src/client/channel.dart b/packages/stream_chat/lib/src/client/channel.dart index 258122a7..54f1ab26 100644 --- a/packages/stream_chat/lib/src/client/channel.dart +++ b/packages/stream_chat/lib/src/client/channel.dart @@ -1268,6 +1268,21 @@ class Channel { pagination: pagination, ); + /// Query channel banned users. + Future queryBannedUsers({ + Filter? filter, + List? sort, + PaginationParams? pagination, + }) { + _checkInitialized(); + filter ??= Filter.equal('channel_cid', cid!); + return _client.queryBannedUsers( + filter: filter, + sort: sort, + pagination: pagination, + ); + } + /// Mutes the channel. Future mute({Duration? expiration}) { _checkInitialized(); diff --git a/packages/stream_chat/lib/src/client/client.dart b/packages/stream_chat/lib/src/client/client.dart index 1de3c91b..a9486c08 100644 --- a/packages/stream_chat/lib/src/client/client.dart +++ b/packages/stream_chat/lib/src/client/client.dart @@ -687,6 +687,18 @@ class StreamChatClient { return response; } + /// Query banned users. + Future queryBannedUsers({ + required Filter filter, + List? sort, + PaginationParams? pagination, + }) => + _chatApi.moderation.queryBannedUsers( + filter: filter, + sort: sort, + pagination: pagination, + ); + /// A message search. Future search( Filter filter, { diff --git a/packages/stream_chat/lib/src/core/api/moderation_api.dart b/packages/stream_chat/lib/src/core/api/moderation_api.dart index 533fbf63..30633458 100644 --- a/packages/stream_chat/lib/src/core/api/moderation_api.dart +++ b/packages/stream_chat/lib/src/core/api/moderation_api.dart @@ -1,5 +1,7 @@ -import 'package:stream_chat/src/core/api/responses.dart'; +import 'dart:convert'; + import 'package:stream_chat/src/core/http/stream_http_client.dart'; +import 'package:stream_chat/stream_chat.dart'; /// Defines the api dedicated to moderation operations class ModerationApi { @@ -125,4 +127,24 @@ class ModerationApi { ); return EmptyResponse.fromJson(response.data); } + + /// Queries banned users. + Future queryBannedUsers({ + Filter? filter, + List? sort, + PaginationParams? pagination, + }) async { + final response = await _client.get( + '/query_banned_users', + queryParameters: { + 'payload': jsonEncode({ + if (sort != null) 'sort': sort, + if (filter != null) 'filter_conditions': filter, + if (pagination != null) ...pagination.toJson(), + }), + }, + ); + + return QueryBannedUsersResponse.fromJson(response.data); + } } diff --git a/packages/stream_chat/lib/src/core/api/responses.dart b/packages/stream_chat/lib/src/core/api/responses.dart index 937e0150..d608c5aa 100644 --- a/packages/stream_chat/lib/src/core/api/responses.dart +++ b/packages/stream_chat/lib/src/core/api/responses.dart @@ -1,6 +1,7 @@ import 'package:json_annotation/json_annotation.dart'; import 'package:stream_chat/src/client/client.dart'; import 'package:stream_chat/src/core/error/error.dart'; +import 'package:stream_chat/src/core/models/banned_user.dart'; import 'package:stream_chat/src/core/models/channel_model.dart'; import 'package:stream_chat/src/core/models/channel_state.dart'; import 'package:stream_chat/src/core/models/device.dart'; @@ -106,6 +107,18 @@ class QueryUsersResponse extends _BaseResponse { _$QueryUsersResponseFromJson(json); } +/// Model response for [StreamChatClient.queryBannedUsers] api call +@JsonSerializable(createToJson: false) +class QueryBannedUsersResponse extends _BaseResponse { + /// List of users returned by the query + @JsonKey(defaultValue: []) + late List bans; + + /// Create a new instance from a json + static QueryBannedUsersResponse fromJson(Map json) => + _$QueryBannedUsersResponseFromJson(json); +} + /// Model response for [channel.getReactions] api call @JsonSerializable(createToJson: false) class QueryReactionsResponse extends _BaseResponse { diff --git a/packages/stream_chat/lib/src/core/api/responses.g.dart b/packages/stream_chat/lib/src/core/api/responses.g.dart index fbcdd252..991b39f6 100644 --- a/packages/stream_chat/lib/src/core/api/responses.g.dart +++ b/packages/stream_chat/lib/src/core/api/responses.g.dart @@ -62,6 +62,15 @@ QueryUsersResponse _$QueryUsersResponseFromJson(Map json) => .toList() ?? []; +QueryBannedUsersResponse _$QueryBannedUsersResponseFromJson( + Map json) => + QueryBannedUsersResponse() + ..duration = json['duration'] as String? + ..bans = (json['bans'] as List?) + ?.map((e) => BannedUser.fromJson(e as Map)) + .toList() ?? + []; + QueryReactionsResponse _$QueryReactionsResponseFromJson( Map json) => QueryReactionsResponse() diff --git a/packages/stream_chat/lib/src/core/models/banned_user.dart b/packages/stream_chat/lib/src/core/models/banned_user.dart new file mode 100644 index 00000000..d5576615 --- /dev/null +++ b/packages/stream_chat/lib/src/core/models/banned_user.dart @@ -0,0 +1,80 @@ +import 'package:equatable/equatable.dart'; +import 'package:json_annotation/json_annotation.dart'; +import 'package:stream_chat/src/core/models/channel_model.dart'; +import 'package:stream_chat/src/core/models/user.dart'; + +part 'banned_user.g.dart'; + +/// Contains information about a [User] that was banned from a [Channel] or App. +@JsonSerializable() +class BannedUser extends Equatable { + /// Creates a new instance of [BannedUser] + const BannedUser({ + required this.user, + this.bannedBy, + this.channel, + this.createdAt, + this.expires, + this.shadow = false, + this.reason, + }); + + /// Create a new instance from a json + factory BannedUser.fromJson(Map json) => + _$BannedUserFromJson(json); + + /// Banned user. + final User user; + + /// User that banned the [user]. + final User? bannedBy; + + /// Channel where the [user] was banned. + final ChannelModel? channel; + + /// Timestamp when the [user] was banned. + final DateTime? createdAt; + + /// Timestamp when the [user] will be unbanned. + final DateTime? expires; + + /// Whether the [user] is a shadow banned user. + final bool shadow; + + /// Reason for the ban. + final String? reason; + + /// Serialize to json + Map toJson() => _$BannedUserToJson(this); + + /// Returns a copy of this object with the given fields updated. + BannedUser copyWith({ + User? user, + User? bannedBy, + ChannelModel? channel, + DateTime? createdAt, + DateTime? expires, + bool? shadow, + String? reason, + }) => + BannedUser( + user: user ?? this.user, + bannedBy: bannedBy ?? this.bannedBy, + channel: channel ?? this.channel, + createdAt: createdAt ?? this.createdAt, + expires: expires ?? this.expires, + shadow: shadow ?? this.shadow, + reason: reason ?? this.reason, + ); + + @override + List get props => [ + user, + bannedBy, + channel, + createdAt, + expires, + shadow, + reason, + ]; +} diff --git a/packages/stream_chat/lib/src/core/models/banned_user.g.dart b/packages/stream_chat/lib/src/core/models/banned_user.g.dart new file mode 100644 index 00000000..1f2a335b --- /dev/null +++ b/packages/stream_chat/lib/src/core/models/banned_user.g.dart @@ -0,0 +1,36 @@ +// GENERATED CODE - DO NOT MODIFY BY HAND + +part of 'banned_user.dart'; + +// ************************************************************************** +// JsonSerializableGenerator +// ************************************************************************** + +BannedUser _$BannedUserFromJson(Map json) => BannedUser( + user: User.fromJson(json['user'] as Map), + bannedBy: json['banned_by'] == null + ? null + : User.fromJson(json['banned_by'] as Map), + channel: json['channel'] == null + ? null + : ChannelModel.fromJson(json['channel'] as Map), + createdAt: json['created_at'] == null + ? null + : DateTime.parse(json['created_at'] as String), + expires: json['expires'] == null + ? null + : DateTime.parse(json['expires'] as String), + shadow: json['shadow'] as bool? ?? false, + reason: json['reason'] as String?, + ); + +Map _$BannedUserToJson(BannedUser instance) => + { + 'user': instance.user.toJson(), + 'banned_by': instance.bannedBy?.toJson(), + 'channel': instance.channel?.toJson(), + 'created_at': instance.createdAt?.toIso8601String(), + 'expires': instance.expires?.toIso8601String(), + 'shadow': instance.shadow, + 'reason': instance.reason, + }; From 15e87f76d53e8f3c61194e00a72d02ab61bc0084 Mon Sep 17 00:00:00 2001 From: Sahil Kumar Date: Mon, 31 Jan 2022 12:53:38 +0530 Subject: [PATCH 11/17] feat(llc): deprecate `channel.banUser` in favor of `channel.banMember`. Signed-off-by: xsahil03x --- packages/stream_chat/lib/src/client/channel.dart | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/packages/stream_chat/lib/src/client/channel.dart b/packages/stream_chat/lib/src/client/channel.dart index 54f1ab26..1809e718 100644 --- a/packages/stream_chat/lib/src/client/channel.dart +++ b/packages/stream_chat/lib/src/client/channel.dart @@ -1296,9 +1296,17 @@ class Channel { } /// Bans the user with given [userID] from the channel. + @Deprecated("Use 'banMember' instead") Future banUser( String userID, Map options, + ) => + banMember(userID, options); + + /// Bans the member with given [userID] from the channel. + Future banMember( + String userID, + Map options, ) async { _checkInitialized(); final opts = Map.from(options) @@ -1310,7 +1318,11 @@ class Channel { } /// Remove the ban for the user with given [userID] in the channel. - Future unbanUser(String userID) async { + @Deprecated("Use 'unbanMember' instead") + Future unbanUser(String userID) => unbanMember(userID); + + /// Remove the ban for the member with given [userID] in the channel. + Future unbanMember(String userID) async { _checkInitialized(); return _client.unbanUser(userID, { 'type': type, From 7723b0c8b6f3c61e986fa749897b97ee582fef4b Mon Sep 17 00:00:00 2001 From: Sahil Kumar Date: Mon, 31 Jan 2022 12:54:20 +0530 Subject: [PATCH 12/17] fix(llc): Update channel state when member gets banned/unbanned. Signed-off-by: xsahil03x --- .../stream_chat/lib/src/client/channel.dart | 52 +++++++++++++++++++ .../lib/src/core/models/member.dart | 7 +++ .../lib/src/core/models/member.g.dart | 4 ++ .../lib/src/core/models/own_user.dart | 4 ++ .../lib/src/core/models/own_user.g.dart | 3 ++ .../stream_chat/lib/src/core/models/user.dart | 16 ++++-- .../lib/src/core/models/user.g.dart | 6 ++- packages/stream_chat/lib/src/event_type.dart | 6 +++ 8 files changed, 94 insertions(+), 4 deletions(-) diff --git a/packages/stream_chat/lib/src/client/channel.dart b/packages/stream_chat/lib/src/client/channel.dart index 1809e718..8f46eb99 100644 --- a/packages/stream_chat/lib/src/client/channel.dart +++ b/packages/stream_chat/lib/src/client/channel.dart @@ -1493,6 +1493,10 @@ class ChannelClientState { _listenMemberRemoved(); + _listenMemberBanned(); + + _listenMemberUnbanned(); + _startCleaning(); _startCleaningPinnedMessages(); @@ -1591,6 +1595,54 @@ class ChannelClientState { })); } + void _listenMemberBanned() { + _subscriptions.add(_channel + .on(EventType.userBanned) + .where((it) => it.cid != null) // filters channel ban from app ban + .listen( + (event) async { + final user = event.user!; + final member = await _channel + .queryMembers(filter: Filter.equal('id', user.id)) + .then((it) => it.members.first); + + _updateMember(member); + }, + )); + } + + void _listenMemberUnbanned() { + _subscriptions.add(_channel + .on(EventType.userUnbanned) + .where((it) => it.cid != null) // filters channel ban from app ban + .listen( + (event) async { + final user = event.user!; + final member = await _channel + .queryMembers(filter: Filter.equal('id', user.id)) + .then((it) => it.members.first); + + _updateMember(member); + }, + )); + } + + void _updateMember(Member member) { + final currentMembers = [...members]; + final memberIndex = currentMembers.indexWhere( + (m) => m.userId == member.userId, + ); + + if (memberIndex == -1) return; + currentMembers[memberIndex] = member; + + updateChannelState( + channelState.copyWith( + members: currentMembers, + ), + ); + } + /// Flag which indicates if [ChannelClientState] contain latest/recent messages or not. /// /// This flag should be managed by UI sdks. diff --git a/packages/stream_chat/lib/src/core/models/member.dart b/packages/stream_chat/lib/src/core/models/member.dart index 0dae7c04..e8b0ecff 100644 --- a/packages/stream_chat/lib/src/core/models/member.dart +++ b/packages/stream_chat/lib/src/core/models/member.dart @@ -20,6 +20,7 @@ class Member extends Equatable { DateTime? createdAt, DateTime? updatedAt, this.banned = false, + this.banExpires, this.shadowBanned = false, }) : createdAt = createdAt ?? DateTime.now(), updatedAt = updatedAt ?? DateTime.now(); @@ -56,6 +57,9 @@ class Member extends Equatable { /// True if the member is banned from the channel final bool banned; + /// The date at which the ban will expire. + final DateTime? banExpires; + /// True if the member is shadow banned from the channel final bool shadowBanned; @@ -77,6 +81,7 @@ class Member extends Equatable { DateTime? createdAt, DateTime? updatedAt, bool? banned, + DateTime? banExpires, bool? shadowBanned, }) => Member( @@ -85,6 +90,7 @@ class Member extends Equatable { inviteRejectedAt: inviteRejectedAt ?? this.inviteRejectedAt, invited: invited ?? this.invited, banned: banned ?? this.banned, + banExpires: banExpires ?? this.banExpires, shadowBanned: shadowBanned ?? this.shadowBanned, role: role ?? this.role, userId: userId ?? this.userId, @@ -106,6 +112,7 @@ class Member extends Equatable { userId, isModerator, banned, + banExpires, shadowBanned, createdAt, updatedAt, diff --git a/packages/stream_chat/lib/src/core/models/member.g.dart b/packages/stream_chat/lib/src/core/models/member.g.dart index 0e711b1a..4da3cfd2 100644 --- a/packages/stream_chat/lib/src/core/models/member.g.dart +++ b/packages/stream_chat/lib/src/core/models/member.g.dart @@ -27,6 +27,9 @@ Member _$MemberFromJson(Map json) => Member( ? null : DateTime.parse(json['updated_at'] as String), banned: json['banned'] as bool? ?? false, + banExpires: json['ban_expires'] == null + ? null + : DateTime.parse(json['ban_expires'] as String), shadowBanned: json['shadow_banned'] as bool? ?? false, ); @@ -39,6 +42,7 @@ Map _$MemberToJson(Member instance) => { 'user_id': instance.userId, 'is_moderator': instance.isModerator, 'banned': instance.banned, + 'ban_expires': instance.banExpires?.toIso8601String(), 'shadow_banned': instance.shadowBanned, 'created_at': instance.createdAt.toIso8601String(), 'updated_at': instance.updatedAt.toIso8601String(), diff --git a/packages/stream_chat/lib/src/core/models/own_user.dart b/packages/stream_chat/lib/src/core/models/own_user.dart index 9077431b..5246f48e 100644 --- a/packages/stream_chat/lib/src/core/models/own_user.dart +++ b/packages/stream_chat/lib/src/core/models/own_user.dart @@ -26,6 +26,7 @@ class OwnUser extends User { bool online = false, Map extraData = const {}, bool banned = false, + DateTime? banExpires, List teams = const [], String? language, }) : super( @@ -39,6 +40,7 @@ class OwnUser extends User { online: online, extraData: extraData, banned: banned, + banExpires: banExpires, teams: teams, language: language, ); @@ -75,6 +77,7 @@ class OwnUser extends User { bool? online, Map? extraData, bool? banned, + DateTime? banExpires, List? teams, List? channelMutes, List? devices, @@ -91,6 +94,7 @@ class OwnUser extends User { // if null, it will be retrieved from extraData['image'] image: image, banned: banned ?? this.banned, + banExpires: banExpires ?? this.banExpires, createdAt: createdAt ?? this.createdAt, updatedAt: updatedAt ?? this.updatedAt, lastActive: lastActive ?? this.lastActive, diff --git a/packages/stream_chat/lib/src/core/models/own_user.g.dart b/packages/stream_chat/lib/src/core/models/own_user.g.dart index 41b6e2f5..be8f2d45 100644 --- a/packages/stream_chat/lib/src/core/models/own_user.g.dart +++ b/packages/stream_chat/lib/src/core/models/own_user.g.dart @@ -35,6 +35,9 @@ OwnUser _$OwnUserFromJson(Map json) => OwnUser( online: json['online'] as bool? ?? false, extraData: json['extra_data'] as Map? ?? const {}, banned: json['banned'] as bool? ?? false, + banExpires: json['ban_expires'] == null + ? null + : DateTime.parse(json['ban_expires'] as String), teams: (json['teams'] as List?)?.map((e) => e as String).toList() ?? const [], diff --git a/packages/stream_chat/lib/src/core/models/user.dart b/packages/stream_chat/lib/src/core/models/user.dart index c6f62b6b..83b2a502 100644 --- a/packages/stream_chat/lib/src/core/models/user.dart +++ b/packages/stream_chat/lib/src/core/models/user.dart @@ -41,6 +41,7 @@ class User extends Equatable { Map extraData = const {}, this.online = false, this.banned = false, + this.banExpires, this.teams = const [], this.language, }) : createdAt = createdAt ?? DateTime.now(), @@ -67,6 +68,8 @@ class User extends Equatable { 'last_active', 'online', 'banned', + 'ban_expires', + 'dashboard_ban_channel_cid', 'teams', 'language', ]; @@ -129,14 +132,18 @@ class User extends Equatable { ) final bool banned; - /// Map of custom user extraData. - @JsonKey(includeIfNull: false) - final Map extraData; + /// The date at which the ban will expire. + @JsonKey(includeIfNull: false, toJson: Serializer.readOnly) + final DateTime? banExpires; /// The language this user prefers. @JsonKey(includeIfNull: false) final String? language; + /// Map of custom user extraData. + @JsonKey(includeIfNull: false) + final Map extraData; + /// List of users to list of userIds. static List? toIds(List? users) => users?.map((u) => u.id).toList(); @@ -158,6 +165,7 @@ class User extends Equatable { bool? online, Map? extraData, bool? banned, + DateTime? banExpires, List? teams, String? language, }) => @@ -174,6 +182,7 @@ class User extends Equatable { online: online ?? this.online, extraData: extraData ?? this.extraData, banned: banned ?? this.banned, + banExpires: banExpires ?? this.banExpires, teams: teams ?? this.teams, language: language ?? this.language, ); @@ -186,6 +195,7 @@ class User extends Equatable { online, extraData, banned, + banExpires, teams, language, ]; diff --git a/packages/stream_chat/lib/src/core/models/user.g.dart b/packages/stream_chat/lib/src/core/models/user.g.dart index 82c799a0..9e6ae3dc 100644 --- a/packages/stream_chat/lib/src/core/models/user.g.dart +++ b/packages/stream_chat/lib/src/core/models/user.g.dart @@ -21,6 +21,9 @@ User _$UserFromJson(Map json) => User( extraData: json['extra_data'] as Map? ?? const {}, online: json['online'] as bool? ?? false, banned: json['banned'] as bool? ?? false, + banExpires: json['ban_expires'] == null + ? null + : DateTime.parse(json['ban_expires'] as String), teams: (json['teams'] as List?)?.map((e) => e as String).toList() ?? const [], @@ -45,7 +48,8 @@ Map _$UserToJson(User instance) { writeNotNull('last_active', readonly(instance.lastActive)); writeNotNull('online', readonly(instance.online)); writeNotNull('banned', readonly(instance.banned)); - val['extra_data'] = instance.extraData; + writeNotNull('ban_expires', readonly(instance.banExpires)); writeNotNull('language', instance.language); + val['extra_data'] = instance.extraData; return val; } diff --git a/packages/stream_chat/lib/src/event_type.dart b/packages/stream_chat/lib/src/event_type.dart index 87529399..80628f2f 100644 --- a/packages/stream_chat/lib/src/event_type.dart +++ b/packages/stream_chat/lib/src/event_type.dart @@ -73,6 +73,12 @@ class EventType { /// Event sent when a member is removed to a channel static const String memberRemoved = 'member.removed'; + /// Event sent when a member is removed to a channel + static const String userBanned = 'user.banned'; + + /// Event sent when a member is removed to a channel + static const String userUnbanned = 'user.unbanned'; + /// Event sent when a channel is hidden static const String channelHidden = 'channel.hidden'; From 93b425458e224196bbc3e895586b4fedc559fc54 Mon Sep 17 00:00:00 2001 From: Sahil Kumar Date: Mon, 31 Jan 2022 13:10:02 +0530 Subject: [PATCH 13/17] chore(llc): update CHANGELOG.md Signed-off-by: xsahil03x --- packages/stream_chat/CHANGELOG.md | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/packages/stream_chat/CHANGELOG.md b/packages/stream_chat/CHANGELOG.md index 2e22b549..dad87973 100644 --- a/packages/stream_chat/CHANGELOG.md +++ b/packages/stream_chat/CHANGELOG.md @@ -1,13 +1,22 @@ ## Upcoming +🐞 Fixed + +- [[#857]](https://github.com/GetStream/stream-chat-flutter/issues/857) Channel now listens for member ban/unban and + updates the channel state with the latest data. + 🔄 Changed -- `client.location` is now deprecated in favor of the new [edge server](https://getstream.io/blog/chat-edge-infrastructure) and will be removed in v4.0.0. +- `client.location` is now deprecated in favor of the + new [edge server](https://getstream.io/blog/chat-edge-infrastructure) and will be removed in v4.0.0. +- `channel.banUser`, `channel.unbanUser` is now deprecated in favor of the new `channel.banMember` + and `channel.unbanMember` and will be removed in v4.0.0. ✅ Added - Added `client.enrichUrl` endpoint for enriching URLs with metadata. - Fixed `unreadCount` after removing user from a channel. +- Added `client.queryBannedUsers`, `channel.queryBannedUsers` endpoint for querying banned users. ## 3.3.1 From b2c41856826f0d0e69889593363a652b8b7c99e6 Mon Sep 17 00:00:00 2001 From: Salvatore Giordano Date: Mon, 31 Jan 2022 11:04:08 +0100 Subject: [PATCH 14/17] chore(repo): bump flutter and melos version --- .github/workflows/stream_flutter_workflow.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/stream_flutter_workflow.yml b/.github/workflows/stream_flutter_workflow.yml index cc093a31..16be547c 100644 --- a/.github/workflows/stream_flutter_workflow.yml +++ b/.github/workflows/stream_flutter_workflow.yml @@ -2,8 +2,8 @@ name: stream_flutter_workflow env: ACTIONS_ALLOW_UNSECURE_COMMANDS: 'true' - flutter_version: "2.5.1" - melos_version: "1.0.0-dev.10" + flutter_version: "2.8.1" + melos_version: "1.2.0" on: pull_request: From 3b6a4ba36bf529b56079d4e642fead0254859053 Mon Sep 17 00:00:00 2001 From: Salvatore Giordano Date: Mon, 31 Jan 2022 12:35:29 +0100 Subject: [PATCH 15/17] chore(repo): fix analysis --- packages/stream_chat/lib/src/client/channel.dart | 6 ------ packages/stream_chat/lib/src/client/retry_queue.dart | 5 ----- .../stream_chat/lib/src/core/error/stream_chat_error.dart | 1 - .../stream_chat/lib/src/core/models/attachment_file.dart | 1 - packages/stream_chat/test/src/client/channel_test.dart | 5 ++--- .../stream_chat/test/src/client/retry_queue_test.dart | 1 - .../stream_chat/test/src/core/api/channel_api_test.dart | 2 -- .../stream_chat/test/src/core/api/responses_test.dart | 6 ------ packages/stream_chat/test/src/core/api/user_api_test.dart | 2 -- .../test/src/core/models/channel_state_test.dart | 5 ----- packages/stream_chat/test/src/core/models/event_test.dart | 2 -- .../stream_chat/test/src/core/models/own_user_test.dart | 2 -- packages/stream_chat/test/src/fakes.dart | 1 - packages/stream_chat_flutter/example/lib/main.dart | 2 -- .../lib/src/attachment/attachment_title.dart | 2 -- .../lib/src/attachment/attachment_widget.dart | 1 - .../lib/src/attachment/giphy_attachment.dart | 2 -- .../lib/src/attachment/image_attachment.dart | 3 --- .../lib/src/attachment/url_attachment.dart | 1 - .../lib/src/attachment/video_attachment.dart | 2 -- .../lib/src/attachment_actions_modal.dart | 3 --- packages/stream_chat_flutter/lib/src/back_button.dart | 2 -- packages/stream_chat_flutter/lib/src/channel_avatar.dart | 1 - packages/stream_chat_flutter/lib/src/channel_header.dart | 5 ----- packages/stream_chat_flutter/lib/src/channel_info.dart | 1 - .../stream_chat_flutter/lib/src/channel_list_header.dart | 4 ---- .../stream_chat_flutter/lib/src/channel_list_view.dart | 4 ---- packages/stream_chat_flutter/lib/src/channel_name.dart | 2 -- packages/stream_chat_flutter/lib/src/channel_preview.dart | 4 ---- .../lib/src/connection_status_builder.dart | 1 - packages/stream_chat_flutter/lib/src/extension.dart | 1 - .../stream_chat_flutter/lib/src/full_screen_media.dart | 2 -- packages/stream_chat_flutter/lib/src/gallery_footer.dart | 3 --- packages/stream_chat_flutter/lib/src/gradient_avatar.dart | 1 - packages/stream_chat_flutter/lib/src/image_group.dart | 3 --- packages/stream_chat_flutter/lib/src/media_list_view.dart | 1 - .../lib/src/message_actions_modal.dart | 7 ------- packages/stream_chat_flutter/lib/src/message_input.dart | 5 ----- .../stream_chat_flutter/lib/src/message_list_view.dart | 8 -------- .../lib/src/message_reactions_modal.dart | 5 ----- .../stream_chat_flutter/lib/src/message_search_item.dart | 2 -- .../lib/src/message_search_list_view.dart | 4 ---- packages/stream_chat_flutter/lib/src/message_text.dart | 2 -- packages/stream_chat_flutter/lib/src/message_widget.dart | 8 -------- .../lib/src/quoted_message_widget.dart | 2 -- packages/stream_chat_flutter/lib/src/reaction_bubble.dart | 3 --- packages/stream_chat_flutter/lib/src/stream_chat.dart | 4 ---- .../stream_chat_flutter/lib/src/stream_chat_theme.dart | 7 ------- packages/stream_chat_flutter/lib/src/stream_svg_icon.dart | 1 - packages/stream_chat_flutter/lib/src/thread_header.dart | 2 -- .../stream_chat_flutter/lib/src/unread_indicator.dart | 1 - packages/stream_chat_flutter/lib/src/user_avatar.dart | 1 - packages/stream_chat_flutter/lib/src/user_item.dart | 4 ---- packages/stream_chat_flutter/lib/src/user_list_view.dart | 2 -- packages/stream_chat_flutter/lib/src/utils.dart | 1 - .../stream_chat_flutter/lib/src/visible_footnote.dart | 1 - .../horizontal_scrollable_positioned_list_test.dart | 1 - .../reversed_scrollable_positioned_list_test.dart | 1 - .../scrollable_positioned_list_test.dart | 2 -- .../separated_scrollable_positioned_list_test.dart | 1 - ...erated_horizontal_scrollable_positioned_list_test.dart | 1 - .../test/src/attachment_actions_modal_test.dart | 1 - .../stream_chat_flutter/test/src/back_button_test.dart | 1 - .../test/src/gradient_avatar_test.dart | 1 - packages/stream_chat_flutter/test/utils/golden.dart | 1 - .../lib/src/message_list_core.dart | 1 - .../lib/src/stream_chat_core.dart | 1 - .../stream_chat_flutter_core/lib/src/user_list_core.dart | 2 -- .../test/message_search_bloc_test.dart | 2 -- .../test/stream_channel_test.dart | 3 --- .../test/stream_chat_core_test.dart | 1 - .../lib/src/stream_chat_localizations_hi.dart | 4 ++-- .../lib/src/stream_chat_persistence_client.dart | 1 - 73 files changed, 4 insertions(+), 181 deletions(-) diff --git a/packages/stream_chat/lib/src/client/channel.dart b/packages/stream_chat/lib/src/client/channel.dart index 8f46eb99..7acc620a 100644 --- a/packages/stream_chat/lib/src/client/channel.dart +++ b/packages/stream_chat/lib/src/client/channel.dart @@ -4,15 +4,9 @@ import 'dart:math'; import 'package:collection/collection.dart' show IterableExtension, ListEquality; import 'package:dio/dio.dart'; -import 'package:rate_limiter/rate_limiter.dart'; import 'package:rxdart/rxdart.dart'; import 'package:stream_chat/src/client/retry_queue.dart'; -import 'package:stream_chat/src/core/error/error.dart'; -import 'package:stream_chat/src/core/models/attachment_file.dart'; -import 'package:stream_chat/src/core/models/channel_state.dart'; -import 'package:stream_chat/src/core/models/user.dart'; import 'package:stream_chat/src/core/util/utils.dart'; -import 'package:stream_chat/src/event_type.dart'; import 'package:stream_chat/stream_chat.dart'; /// Class that manages a specific channel. diff --git a/packages/stream_chat/lib/src/client/retry_queue.dart b/packages/stream_chat/lib/src/client/retry_queue.dart index e1b6df70..17b019a5 100644 --- a/packages/stream_chat/lib/src/client/retry_queue.dart +++ b/packages/stream_chat/lib/src/client/retry_queue.dart @@ -1,13 +1,8 @@ import 'dart:async'; import 'package:collection/collection.dart'; -import 'package:logging/logging.dart'; import 'package:rxdart/rxdart.dart'; -import 'package:stream_chat/src/client/channel.dart'; import 'package:stream_chat/src/client/retry_policy.dart'; -import 'package:stream_chat/src/core/error/error.dart'; -import 'package:stream_chat/src/core/models/message.dart'; -import 'package:stream_chat/src/event_type.dart'; import 'package:stream_chat/stream_chat.dart'; /// The retry queue associated to a channel diff --git a/packages/stream_chat/lib/src/core/error/stream_chat_error.dart b/packages/stream_chat/lib/src/core/error/stream_chat_error.dart index ce234c84..bebea751 100644 --- a/packages/stream_chat/lib/src/core/error/stream_chat_error.dart +++ b/packages/stream_chat/lib/src/core/error/stream_chat_error.dart @@ -1,5 +1,4 @@ import 'package:equatable/equatable.dart'; -import 'package:stream_chat/src/core/error/chat_error_code.dart'; import 'package:stream_chat/stream_chat.dart'; import 'package:web_socket_channel/web_socket_channel.dart'; diff --git a/packages/stream_chat/lib/src/core/models/attachment_file.dart b/packages/stream_chat/lib/src/core/models/attachment_file.dart index e855f7e3..71cdec29 100644 --- a/packages/stream_chat/lib/src/core/models/attachment_file.dart +++ b/packages/stream_chat/lib/src/core/models/attachment_file.dart @@ -3,7 +3,6 @@ import 'dart:typed_data'; import 'package:dio/dio.dart' show MultipartFile; import 'package:freezed_annotation/freezed_annotation.dart'; import 'package:http_parser/http_parser.dart'; -import 'package:meta/meta.dart'; import 'package:stream_chat/src/core/platform_detector/platform_detector.dart'; import 'package:stream_chat/src/core/util/extension.dart'; diff --git a/packages/stream_chat/test/src/client/channel_test.dart b/packages/stream_chat/test/src/client/channel_test.dart index c217431a..912e11d3 100644 --- a/packages/stream_chat/test/src/client/channel_test.dart +++ b/packages/stream_chat/test/src/client/channel_test.dart @@ -1,5 +1,4 @@ import 'package:mocktail/mocktail.dart'; -import 'package:stream_chat/src/client/channel.dart'; import 'package:stream_chat/src/client/retry_policy.dart'; import 'package:stream_chat/stream_chat.dart'; import 'package:test/test.dart'; @@ -2046,7 +2045,7 @@ void main() { {'type': channelType, 'id': channelId, ...options}, )).thenAnswer((_) async => EmptyResponse()); - final res = await channel.banUser(userId, options); + final res = await channel.banMember(userId, options); expect(res, isNotNull); @@ -2062,7 +2061,7 @@ void main() { when(() => client.unbanUser(userId, any())) .thenAnswer((_) async => EmptyResponse()); - final res = await channel.unbanUser(userId); + final res = await channel.unbanMember(userId); expect(res, isNotNull); diff --git a/packages/stream_chat/test/src/client/retry_queue_test.dart b/packages/stream_chat/test/src/client/retry_queue_test.dart index 084b82ec..a04feb3e 100644 --- a/packages/stream_chat/test/src/client/retry_queue_test.dart +++ b/packages/stream_chat/test/src/client/retry_queue_test.dart @@ -4,7 +4,6 @@ import 'package:stream_chat/src/client/retry_queue.dart'; import 'package:stream_chat/src/core/models/event.dart'; import 'package:stream_chat/src/core/models/message.dart'; import 'package:stream_chat/src/event_type.dart'; -import 'package:test/scaffolding.dart'; import 'package:test/test.dart'; import '../mocks.dart'; diff --git a/packages/stream_chat/test/src/core/api/channel_api_test.dart b/packages/stream_chat/test/src/core/api/channel_api_test.dart index e427ff2e..7835ab6a 100644 --- a/packages/stream_chat/test/src/core/api/channel_api_test.dart +++ b/packages/stream_chat/test/src/core/api/channel_api_test.dart @@ -3,8 +3,6 @@ import 'dart:convert'; import 'package:dio/dio.dart'; import 'package:mocktail/mocktail.dart'; import 'package:stream_chat/src/core/api/channel_api.dart'; -import 'package:stream_chat/src/core/models/channel_model.dart'; -import 'package:stream_chat/src/core/models/channel_state.dart'; import 'package:stream_chat/stream_chat.dart'; import 'package:test/test.dart'; diff --git a/packages/stream_chat/test/src/core/api/responses_test.dart b/packages/stream_chat/test/src/core/api/responses_test.dart index a61d825b..8a73fccd 100644 --- a/packages/stream_chat/test/src/core/api/responses_test.dart +++ b/packages/stream_chat/test/src/core/api/responses_test.dart @@ -1,11 +1,5 @@ import 'dart:convert'; -import 'package:stream_chat/src/core/api/responses.dart'; -import 'package:stream_chat/src/core/models/device.dart'; -import 'package:stream_chat/src/core/models/member.dart'; -import 'package:stream_chat/src/core/models/message.dart'; -import 'package:stream_chat/src/core/models/reaction.dart'; -import 'package:stream_chat/src/core/models/read.dart'; import 'package:stream_chat/stream_chat.dart'; import 'package:test/test.dart'; diff --git a/packages/stream_chat/test/src/core/api/user_api_test.dart b/packages/stream_chat/test/src/core/api/user_api_test.dart index 6eecbee1..dbf83f2c 100644 --- a/packages/stream_chat/test/src/core/api/user_api_test.dart +++ b/packages/stream_chat/test/src/core/api/user_api_test.dart @@ -2,9 +2,7 @@ import 'dart:convert'; import 'package:dio/dio.dart'; import 'package:mocktail/mocktail.dart'; -import 'package:stream_chat/src/core/api/requests.dart'; import 'package:stream_chat/src/core/api/user_api.dart'; -import 'package:stream_chat/src/core/models/filter.dart'; import 'package:stream_chat/stream_chat.dart'; import 'package:test/test.dart'; diff --git a/packages/stream_chat/test/src/core/models/channel_state_test.dart b/packages/stream_chat/test/src/core/models/channel_state_test.dart index 8bd17d46..58f810a4 100644 --- a/packages/stream_chat/test/src/core/models/channel_state_test.dart +++ b/packages/stream_chat/test/src/core/models/channel_state_test.dart @@ -1,8 +1,3 @@ -import 'package:stream_chat/src/core/models/channel_config.dart'; -import 'package:stream_chat/src/core/models/channel_state.dart'; -import 'package:stream_chat/src/core/models/command.dart'; -import 'package:stream_chat/src/core/models/message.dart'; -import 'package:stream_chat/src/core/models/user.dart'; import 'package:stream_chat/stream_chat.dart'; import 'package:test/test.dart'; diff --git a/packages/stream_chat/test/src/core/models/event_test.dart b/packages/stream_chat/test/src/core/models/event_test.dart index 0cd9a0ad..40ebc044 100644 --- a/packages/stream_chat/test/src/core/models/event_test.dart +++ b/packages/stream_chat/test/src/core/models/event_test.dart @@ -1,5 +1,3 @@ -import 'package:stream_chat/src/core/models/event.dart'; -import 'package:stream_chat/src/core/models/own_user.dart'; import 'package:stream_chat/stream_chat.dart'; import 'package:test/test.dart'; diff --git a/packages/stream_chat/test/src/core/models/own_user_test.dart b/packages/stream_chat/test/src/core/models/own_user_test.dart index ea84185f..430e9c36 100644 --- a/packages/stream_chat/test/src/core/models/own_user_test.dart +++ b/packages/stream_chat/test/src/core/models/own_user_test.dart @@ -1,6 +1,4 @@ import 'package:mocktail/mocktail.dart'; -import 'package:stream_chat/src/core/models/own_user.dart'; -import 'package:stream_chat/src/core/models/user.dart'; import 'package:stream_chat/stream_chat.dart'; import 'package:test/test.dart'; diff --git a/packages/stream_chat/test/src/fakes.dart b/packages/stream_chat/test/src/fakes.dart index 3dcd8ebd..b4089512 100644 --- a/packages/stream_chat/test/src/fakes.dart +++ b/packages/stream_chat/test/src/fakes.dart @@ -1,6 +1,5 @@ import 'dart:async'; -import 'package:dio/dio.dart'; import 'package:mocktail/mocktail.dart'; import 'package:rxdart/rxdart.dart'; import 'package:stream_chat/src/core/api/channel_api.dart'; diff --git a/packages/stream_chat_flutter/example/lib/main.dart b/packages/stream_chat_flutter/example/lib/main.dart index 3d292b09..6b5a299f 100644 --- a/packages/stream_chat_flutter/example/lib/main.dart +++ b/packages/stream_chat_flutter/example/lib/main.dart @@ -1,5 +1,3 @@ -import 'package:flutter/cupertino.dart'; -import 'package:flutter/foundation.dart'; import 'package:flutter/material.dart'; import 'package:stream_chat_flutter/stream_chat_flutter.dart'; import 'package:stream_chat_localizations/stream_chat_localizations.dart'; diff --git a/packages/stream_chat_flutter/lib/src/attachment/attachment_title.dart b/packages/stream_chat_flutter/lib/src/attachment/attachment_title.dart index df134250..f1369d49 100644 --- a/packages/stream_chat_flutter/lib/src/attachment/attachment_title.dart +++ b/packages/stream_chat_flutter/lib/src/attachment/attachment_title.dart @@ -1,7 +1,5 @@ import 'package:flutter/material.dart'; -import 'package:stream_chat_flutter/src/theme/themes.dart'; import 'package:stream_chat_flutter/stream_chat_flutter.dart'; -import 'package:stream_chat_flutter_core/stream_chat_flutter_core.dart'; /// Title for attachments class AttachmentTitle extends StatelessWidget { diff --git a/packages/stream_chat_flutter/lib/src/attachment/attachment_widget.dart b/packages/stream_chat_flutter/lib/src/attachment/attachment_widget.dart index 7a5c891b..75a890e8 100644 --- a/packages/stream_chat_flutter/lib/src/attachment/attachment_widget.dart +++ b/packages/stream_chat_flutter/lib/src/attachment/attachment_widget.dart @@ -1,6 +1,5 @@ import 'package:flutter/material.dart'; import 'package:stream_chat_flutter/stream_chat_flutter.dart'; -import 'package:stream_chat_flutter_core/stream_chat_flutter_core.dart'; /// Enum for identifying type of attachment enum AttachmentSource { diff --git a/packages/stream_chat_flutter/lib/src/attachment/giphy_attachment.dart b/packages/stream_chat_flutter/lib/src/attachment/giphy_attachment.dart index cc29f0b2..1974b040 100644 --- a/packages/stream_chat_flutter/lib/src/attachment/giphy_attachment.dart +++ b/packages/stream_chat_flutter/lib/src/attachment/giphy_attachment.dart @@ -3,9 +3,7 @@ import 'package:flutter/material.dart'; import 'package:shimmer/shimmer.dart'; import 'package:stream_chat_flutter/src/attachment/attachment_widget.dart'; import 'package:stream_chat_flutter/src/extension.dart'; -import 'package:stream_chat_flutter/src/visible_footnote.dart'; import 'package:stream_chat_flutter/stream_chat_flutter.dart'; -import 'package:stream_chat_flutter_core/stream_chat_flutter_core.dart'; /// Widget for showing a GIF attachment class GiphyAttachment extends AttachmentWidget { diff --git a/packages/stream_chat_flutter/lib/src/attachment/image_attachment.dart b/packages/stream_chat_flutter/lib/src/attachment/image_attachment.dart index ff01eea3..a46ff25c 100644 --- a/packages/stream_chat_flutter/lib/src/attachment/image_attachment.dart +++ b/packages/stream_chat_flutter/lib/src/attachment/image_attachment.dart @@ -2,11 +2,8 @@ import 'package:cached_network_image/cached_network_image.dart'; import 'package:flutter/material.dart'; import 'package:shimmer/shimmer.dart'; import 'package:stream_chat_flutter/src/attachment/attachment_title.dart'; -import 'package:stream_chat_flutter/src/attachment/attachment_upload_state_builder.dart'; import 'package:stream_chat_flutter/src/attachment/attachment_widget.dart'; -import 'package:stream_chat_flutter/src/theme/themes.dart'; import 'package:stream_chat_flutter/stream_chat_flutter.dart'; -import 'package:stream_chat_flutter_core/stream_chat_flutter_core.dart'; /// Widget for showing an image attachment class ImageAttachment extends AttachmentWidget { diff --git a/packages/stream_chat_flutter/lib/src/attachment/url_attachment.dart b/packages/stream_chat_flutter/lib/src/attachment/url_attachment.dart index d56bcd6a..8a79ca21 100644 --- a/packages/stream_chat_flutter/lib/src/attachment/url_attachment.dart +++ b/packages/stream_chat_flutter/lib/src/attachment/url_attachment.dart @@ -1,6 +1,5 @@ import 'package:cached_network_image/cached_network_image.dart'; import 'package:flutter/material.dart'; -import 'package:stream_chat_flutter/src/utils.dart'; import 'package:stream_chat_flutter/stream_chat_flutter.dart'; /// Widget to display URL attachment diff --git a/packages/stream_chat_flutter/lib/src/attachment/video_attachment.dart b/packages/stream_chat_flutter/lib/src/attachment/video_attachment.dart index 0fc97d5e..3df1f451 100644 --- a/packages/stream_chat_flutter/lib/src/attachment/video_attachment.dart +++ b/packages/stream_chat_flutter/lib/src/attachment/video_attachment.dart @@ -1,8 +1,6 @@ import 'package:flutter/material.dart'; import 'package:stream_chat_flutter/src/attachment/attachment_title.dart'; import 'package:stream_chat_flutter/src/attachment/attachment_widget.dart'; -import 'package:stream_chat_flutter/src/full_screen_media.dart'; -import 'package:stream_chat_flutter/src/theme/themes.dart'; import 'package:stream_chat_flutter/src/video_thumbnail_image.dart'; import 'package:stream_chat_flutter/stream_chat_flutter.dart'; diff --git a/packages/stream_chat_flutter/lib/src/attachment_actions_modal.dart b/packages/stream_chat_flutter/lib/src/attachment_actions_modal.dart index ac9213b6..4fedfc12 100644 --- a/packages/stream_chat_flutter/lib/src/attachment_actions_modal.dart +++ b/packages/stream_chat_flutter/lib/src/attachment_actions_modal.dart @@ -1,7 +1,4 @@ -import 'dart:ui'; - import 'package:dio/dio.dart'; -import 'package:flutter/foundation.dart'; import 'package:flutter/material.dart'; import 'package:image_gallery_saver/image_gallery_saver.dart'; import 'package:path_provider/path_provider.dart'; diff --git a/packages/stream_chat_flutter/lib/src/back_button.dart b/packages/stream_chat_flutter/lib/src/back_button.dart index b0b04b8d..08d8dabf 100644 --- a/packages/stream_chat_flutter/lib/src/back_button.dart +++ b/packages/stream_chat_flutter/lib/src/back_button.dart @@ -1,6 +1,4 @@ import 'package:flutter/material.dart'; -import 'package:stream_chat_flutter/src/stream_svg_icon.dart'; -import 'package:stream_chat_flutter/src/unread_indicator.dart'; import 'package:stream_chat_flutter/stream_chat_flutter.dart'; /// Back button implementation diff --git a/packages/stream_chat_flutter/lib/src/channel_avatar.dart b/packages/stream_chat_flutter/lib/src/channel_avatar.dart index 59b4a73a..ba24a640 100644 --- a/packages/stream_chat_flutter/lib/src/channel_avatar.dart +++ b/packages/stream_chat_flutter/lib/src/channel_avatar.dart @@ -2,7 +2,6 @@ import 'package:cached_network_image/cached_network_image.dart'; import 'package:flutter/material.dart'; import 'package:stream_chat_flutter/src/group_avatar.dart'; import 'package:stream_chat_flutter/stream_chat_flutter.dart'; -import 'package:stream_chat_flutter_core/stream_chat_flutter_core.dart'; /// ![screenshot](https://raw.githubusercontent.com/GetStream/stream-chat-flutter/master/packages/stream_chat_flutter/screenshots/channel_image.png) /// ![screenshot](https://raw.githubusercontent.com/GetStream/stream-chat-flutter/master/packages/stream_chat_flutter/screenshots/channel_image_paint.png) diff --git a/packages/stream_chat_flutter/lib/src/channel_header.dart b/packages/stream_chat_flutter/lib/src/channel_header.dart index 62f994dc..954aa758 100644 --- a/packages/stream_chat_flutter/lib/src/channel_header.dart +++ b/packages/stream_chat_flutter/lib/src/channel_header.dart @@ -1,13 +1,8 @@ import 'package:flutter/material.dart'; import 'package:flutter/services.dart'; -import 'package:stream_chat_flutter/src/back_button.dart'; import 'package:stream_chat_flutter/src/channel_info.dart'; -import 'package:stream_chat_flutter/src/channel_name.dart'; import 'package:stream_chat_flutter/src/extension.dart'; -import 'package:stream_chat_flutter/src/info_tile.dart'; -import 'package:stream_chat_flutter/src/stream_chat_theme.dart'; import 'package:stream_chat_flutter/stream_chat_flutter.dart'; -import 'package:stream_chat_flutter_core/stream_chat_flutter_core.dart'; /// ![screenshot](https://raw.githubusercontent.com/GetStream/stream-chat-flutter/master/packages/stream_chat_flutter/screenshots/channel_header.png) /// ![screenshot](https://raw.githubusercontent.com/GetStream/stream-chat-flutter/master/packages/stream_chat_flutter/screenshots/channel_header_paint.png) diff --git a/packages/stream_chat_flutter/lib/src/channel_info.dart b/packages/stream_chat_flutter/lib/src/channel_info.dart index 62bfd1de..ff068d21 100644 --- a/packages/stream_chat_flutter/lib/src/channel_info.dart +++ b/packages/stream_chat_flutter/lib/src/channel_info.dart @@ -1,6 +1,5 @@ import 'package:collection/collection.dart' show IterableExtension; import 'package:flutter/material.dart'; -import 'package:jiffy/jiffy.dart'; import 'package:stream_chat_flutter/src/extension.dart'; import 'package:stream_chat_flutter/stream_chat_flutter.dart'; diff --git a/packages/stream_chat_flutter/lib/src/channel_list_header.dart b/packages/stream_chat_flutter/lib/src/channel_list_header.dart index 3ebd9001..6c54ad89 100644 --- a/packages/stream_chat_flutter/lib/src/channel_list_header.dart +++ b/packages/stream_chat_flutter/lib/src/channel_list_header.dart @@ -1,12 +1,8 @@ -import 'dart:ui'; - import 'package:flutter/material.dart'; import 'package:flutter/services.dart'; import 'package:flutter_svg/flutter_svg.dart'; import 'package:stream_chat_flutter/src/extension.dart'; -import 'package:stream_chat_flutter/src/stream_neumorphic_button.dart'; import 'package:stream_chat_flutter/stream_chat_flutter.dart'; -import 'package:stream_chat_flutter_core/stream_chat_flutter_core.dart'; /// Widget builder for title typedef TitleBuilder = Widget Function( diff --git a/packages/stream_chat_flutter/lib/src/channel_list_view.dart b/packages/stream_chat_flutter/lib/src/channel_list_view.dart index fd59489a..0ceff00e 100644 --- a/packages/stream_chat_flutter/lib/src/channel_list_view.dart +++ b/packages/stream_chat_flutter/lib/src/channel_list_view.dart @@ -1,14 +1,10 @@ import 'package:collection/collection.dart'; -import 'package:flutter/foundation.dart'; import 'package:flutter/material.dart'; import 'package:flutter_slidable/flutter_slidable.dart'; import 'package:shimmer/shimmer.dart'; import 'package:stream_chat_flutter/src/channel_bottom_sheet.dart'; import 'package:stream_chat_flutter/src/extension.dart'; -import 'package:stream_chat_flutter/src/stream_svg_icon.dart'; -import 'package:stream_chat_flutter/src/theme/themes.dart'; import 'package:stream_chat_flutter/stream_chat_flutter.dart'; -import 'package:stream_chat_flutter_core/stream_chat_flutter_core.dart'; /// Callback called when tapping on a channel typedef ChannelTapCallback = void Function(Channel, Widget?); diff --git a/packages/stream_chat_flutter/lib/src/channel_name.dart b/packages/stream_chat_flutter/lib/src/channel_name.dart index 258893c8..a1e81005 100644 --- a/packages/stream_chat_flutter/lib/src/channel_name.dart +++ b/packages/stream_chat_flutter/lib/src/channel_name.dart @@ -1,8 +1,6 @@ import 'package:flutter/material.dart'; -import 'package:flutter/rendering.dart'; import 'package:stream_chat_flutter/src/extension.dart'; import 'package:stream_chat_flutter/stream_chat_flutter.dart'; -import 'package:stream_chat_flutter_core/stream_chat_flutter_core.dart'; /// It shows the current [Channel] name using a [Text] widget. /// diff --git a/packages/stream_chat_flutter/lib/src/channel_preview.dart b/packages/stream_chat_flutter/lib/src/channel_preview.dart index de038c82..125d06fe 100644 --- a/packages/stream_chat_flutter/lib/src/channel_preview.dart +++ b/packages/stream_chat_flutter/lib/src/channel_preview.dart @@ -1,12 +1,8 @@ import 'package:collection/collection.dart' show IterableExtension, ListEquality; import 'package:flutter/material.dart'; -import 'package:flutter/widgets.dart'; -import 'package:jiffy/jiffy.dart'; import 'package:stream_chat_flutter/src/extension.dart'; -import 'package:stream_chat_flutter/src/stream_svg_icon.dart'; import 'package:stream_chat_flutter/stream_chat_flutter.dart'; -import 'package:stream_chat_flutter_core/stream_chat_flutter_core.dart'; /// ![screenshot](https://raw.githubusercontent.com/GetStream/stream-chat-flutter/master/packages/stream_chat_flutter/screenshots/channel_preview.png) /// ![screenshot](https://raw.githubusercontent.com/GetStream/stream-chat-flutter/master/packages/stream_chat_flutter/screenshots/channel_preview_paint.png) diff --git a/packages/stream_chat_flutter/lib/src/connection_status_builder.dart b/packages/stream_chat_flutter/lib/src/connection_status_builder.dart index 2cba8eb4..f0eca9da 100644 --- a/packages/stream_chat_flutter/lib/src/connection_status_builder.dart +++ b/packages/stream_chat_flutter/lib/src/connection_status_builder.dart @@ -1,6 +1,5 @@ import 'package:flutter/material.dart'; import 'package:stream_chat_flutter/stream_chat_flutter.dart'; -import 'package:stream_chat_flutter_core/stream_chat_flutter_core.dart'; /// Widget that builds itself based on the latest snapshot of interaction with /// a [Stream] of type [ConnectionStatus]. diff --git a/packages/stream_chat_flutter/lib/src/extension.dart b/packages/stream_chat_flutter/lib/src/extension.dart index f95fde59..f955ca99 100644 --- a/packages/stream_chat_flutter/lib/src/extension.dart +++ b/packages/stream_chat_flutter/lib/src/extension.dart @@ -1,4 +1,3 @@ -import 'package:characters/characters.dart'; import 'package:diacritic/diacritic.dart'; import 'package:file_picker/file_picker.dart'; import 'package:flutter/foundation.dart'; diff --git a/packages/stream_chat_flutter/lib/src/full_screen_media.dart b/packages/stream_chat_flutter/lib/src/full_screen_media.dart index 84ddb803..83ae96b1 100644 --- a/packages/stream_chat_flutter/lib/src/full_screen_media.dart +++ b/packages/stream_chat_flutter/lib/src/full_screen_media.dart @@ -6,8 +6,6 @@ import 'package:chewie/chewie.dart'; import 'package:flutter/material.dart'; import 'package:photo_view/photo_view.dart'; import 'package:stream_chat_flutter/src/extension.dart'; -import 'package:stream_chat_flutter/src/gallery_footer.dart'; -import 'package:stream_chat_flutter/src/gallery_header.dart'; import 'package:stream_chat_flutter/stream_chat_flutter.dart'; import 'package:video_player/video_player.dart'; diff --git a/packages/stream_chat_flutter/lib/src/gallery_footer.dart b/packages/stream_chat_flutter/lib/src/gallery_footer.dart index 0acd9b02..f189dae3 100644 --- a/packages/stream_chat_flutter/lib/src/gallery_footer.dart +++ b/packages/stream_chat_flutter/lib/src/gallery_footer.dart @@ -6,11 +6,8 @@ import 'package:flutter/material.dart'; import 'package:path_provider/path_provider.dart'; import 'package:share_plus/share_plus.dart'; import 'package:stream_chat_flutter/src/extension.dart'; -import 'package:stream_chat_flutter/src/stream_chat_theme.dart'; -import 'package:stream_chat_flutter/src/theme/themes.dart'; import 'package:stream_chat_flutter/src/video_thumbnail_image.dart'; import 'package:stream_chat_flutter/stream_chat_flutter.dart'; -import 'package:stream_chat_flutter_core/stream_chat_flutter_core.dart'; /// Footer widget for media display class GalleryFooter extends StatefulWidget implements PreferredSizeWidget { diff --git a/packages/stream_chat_flutter/lib/src/gradient_avatar.dart b/packages/stream_chat_flutter/lib/src/gradient_avatar.dart index a02976c8..12824f45 100644 --- a/packages/stream_chat_flutter/lib/src/gradient_avatar.dart +++ b/packages/stream_chat_flutter/lib/src/gradient_avatar.dart @@ -1,5 +1,4 @@ import 'dart:math'; -import 'dart:ui'; import 'dart:ui' as ui; import 'package:flutter/material.dart'; diff --git a/packages/stream_chat_flutter/lib/src/image_group.dart b/packages/stream_chat_flutter/lib/src/image_group.dart index 88b309fe..ff67b068 100644 --- a/packages/stream_chat_flutter/lib/src/image_group.dart +++ b/packages/stream_chat_flutter/lib/src/image_group.dart @@ -1,8 +1,5 @@ import 'package:flutter/material.dart'; -import 'package:stream_chat_flutter/src/full_screen_media.dart'; -import 'package:stream_chat_flutter/src/theme/themes.dart'; import 'package:stream_chat_flutter/stream_chat_flutter.dart'; -import 'package:stream_chat_flutter_core/stream_chat_flutter_core.dart'; /// Widget for constructing a group of images in message class ImageGroup extends StatelessWidget { diff --git a/packages/stream_chat_flutter/lib/src/media_list_view.dart b/packages/stream_chat_flutter/lib/src/media_list_view.dart index 8b1f7f06..d5a9233c 100644 --- a/packages/stream_chat_flutter/lib/src/media_list_view.dart +++ b/packages/stream_chat_flutter/lib/src/media_list_view.dart @@ -5,7 +5,6 @@ import 'package:flutter/foundation.dart'; import 'package:flutter/material.dart'; import 'package:flutter_svg/flutter_svg.dart'; import 'package:photo_manager/photo_manager.dart'; -import 'package:stream_chat_flutter/src/stream_svg_icon.dart'; import 'package:stream_chat_flutter/stream_chat_flutter.dart'; extension on Duration { diff --git a/packages/stream_chat_flutter/lib/src/message_actions_modal.dart b/packages/stream_chat_flutter/lib/src/message_actions_modal.dart index a67004af..907f4096 100644 --- a/packages/stream_chat_flutter/lib/src/message_actions_modal.dart +++ b/packages/stream_chat_flutter/lib/src/message_actions_modal.dart @@ -1,13 +1,6 @@ import 'dart:ui'; - -import 'package:flutter/foundation.dart'; import 'package:flutter/material.dart'; import 'package:stream_chat_flutter/src/extension.dart'; -import 'package:stream_chat_flutter/src/message_action.dart'; -import 'package:stream_chat_flutter/src/reaction_picker.dart'; -import 'package:stream_chat_flutter/src/stream_svg_icon.dart'; -import 'package:stream_chat_flutter/src/theme/themes.dart'; -import 'package:stream_chat_flutter/src/utils.dart'; import 'package:stream_chat_flutter/stream_chat_flutter.dart'; /// Constructs a modal with actions for a message diff --git a/packages/stream_chat_flutter/lib/src/message_input.dart b/packages/stream_chat_flutter/lib/src/message_input.dart index a43359ee..8672f180 100644 --- a/packages/stream_chat_flutter/lib/src/message_input.dart +++ b/packages/stream_chat_flutter/lib/src/message_input.dart @@ -4,7 +4,6 @@ import 'dart:math'; import 'package:cached_network_image/cached_network_image.dart'; import 'package:collection/collection.dart'; import 'package:file_picker/file_picker.dart'; -import 'package:flutter/cupertino.dart'; import 'package:flutter/foundation.dart'; import 'package:flutter/material.dart'; import 'package:flutter_svg/flutter_svg.dart'; @@ -16,16 +15,12 @@ import 'package:stream_chat_flutter/src/emoji/emoji.dart'; import 'package:stream_chat_flutter/src/emoji_overlay.dart'; import 'package:stream_chat_flutter/src/extension.dart'; import 'package:stream_chat_flutter/src/media_list_view.dart'; -import 'package:stream_chat_flutter/src/message_list_view.dart'; import 'package:stream_chat_flutter/src/multi_overlay.dart'; import 'package:stream_chat_flutter/src/quoted_message_widget.dart'; -import 'package:stream_chat_flutter/src/stream_chat_theme.dart'; -import 'package:stream_chat_flutter/src/stream_svg_icon.dart'; import 'package:stream_chat_flutter/src/user_mentions_overlay.dart'; import 'package:stream_chat_flutter/src/video_service.dart'; import 'package:stream_chat_flutter/src/video_thumbnail_image.dart'; import 'package:stream_chat_flutter/stream_chat_flutter.dart'; -import 'package:stream_chat_flutter_core/stream_chat_flutter_core.dart'; import 'package:video_compress/video_compress.dart'; export 'package:video_compress/video_compress.dart' show VideoQuality; diff --git a/packages/stream_chat_flutter/lib/src/message_list_view.dart b/packages/stream_chat_flutter/lib/src/message_list_view.dart index 40e74f23..edd9c601 100644 --- a/packages/stream_chat_flutter/lib/src/message_list_view.dart +++ b/packages/stream_chat_flutter/lib/src/message_list_view.dart @@ -2,20 +2,12 @@ import 'dart:async'; import 'package:collection/collection.dart'; -import 'package:flutter/cupertino.dart'; import 'package:flutter/foundation.dart'; import 'package:flutter/material.dart'; -import 'package:jiffy/jiffy.dart'; import 'package:stream_chat_flutter/scrollable_positioned_list/scrollable_positioned_list.dart'; import 'package:stream_chat_flutter/src/extension.dart'; -import 'package:stream_chat_flutter/src/info_tile.dart'; -import 'package:stream_chat_flutter/src/message_widget.dart'; -import 'package:stream_chat_flutter/src/stream_svg_icon.dart'; import 'package:stream_chat_flutter/src/swipeable.dart'; -import 'package:stream_chat_flutter/src/system_message.dart'; -import 'package:stream_chat_flutter/src/theme/themes.dart'; import 'package:stream_chat_flutter/stream_chat_flutter.dart'; -import 'package:stream_chat_flutter_core/stream_chat_flutter_core.dart'; import 'package:visibility_detector/visibility_detector.dart'; /// Widget builder for message diff --git a/packages/stream_chat_flutter/lib/src/message_reactions_modal.dart b/packages/stream_chat_flutter/lib/src/message_reactions_modal.dart index 6a73c439..98e64c25 100644 --- a/packages/stream_chat_flutter/lib/src/message_reactions_modal.dart +++ b/packages/stream_chat_flutter/lib/src/message_reactions_modal.dart @@ -3,12 +3,7 @@ import 'dart:ui'; import 'package:flutter/material.dart'; import 'package:stream_chat_flutter/src/extension.dart'; import 'package:stream_chat_flutter/src/reaction_bubble.dart'; -import 'package:stream_chat_flutter/src/reaction_picker.dart'; -import 'package:stream_chat_flutter/src/stream_chat.dart'; -import 'package:stream_chat_flutter/src/theme/themes.dart'; -import 'package:stream_chat_flutter/src/user_avatar.dart'; import 'package:stream_chat_flutter/stream_chat_flutter.dart'; -import 'package:stream_chat_flutter_core/stream_chat_flutter_core.dart'; /// Modal widget for displaying message reactions class MessageReactionsModal extends StatelessWidget { diff --git a/packages/stream_chat_flutter/lib/src/message_search_item.dart b/packages/stream_chat_flutter/lib/src/message_search_item.dart index 07f9f1c4..022ec7ce 100644 --- a/packages/stream_chat_flutter/lib/src/message_search_item.dart +++ b/packages/stream_chat_flutter/lib/src/message_search_item.dart @@ -1,8 +1,6 @@ import 'package:flutter/material.dart'; -import 'package:jiffy/jiffy.dart'; import 'package:stream_chat_flutter/src/extension.dart'; import 'package:stream_chat_flutter/stream_chat_flutter.dart'; -import 'package:stream_chat_flutter_core/stream_chat_flutter_core.dart'; /// It shows the current [Message] preview. /// diff --git a/packages/stream_chat_flutter/lib/src/message_search_list_view.dart b/packages/stream_chat_flutter/lib/src/message_search_list_view.dart index a5edc203..76ae0e98 100644 --- a/packages/stream_chat_flutter/lib/src/message_search_list_view.dart +++ b/packages/stream_chat_flutter/lib/src/message_search_list_view.dart @@ -1,10 +1,6 @@ import 'package:flutter/material.dart'; import 'package:stream_chat_flutter/src/extension.dart'; -import 'package:stream_chat_flutter/src/info_tile.dart'; -import 'package:stream_chat_flutter/src/message_search_item.dart'; -import 'package:stream_chat_flutter/src/theme/themes.dart'; import 'package:stream_chat_flutter/stream_chat_flutter.dart'; -import 'package:stream_chat_flutter_core/stream_chat_flutter_core.dart'; /// Callback called when tapping on a user typedef MessageSearchItemTapCallback = void Function(GetMessageResponse); diff --git a/packages/stream_chat_flutter/lib/src/message_text.dart b/packages/stream_chat_flutter/lib/src/message_text.dart index 6cdcd760..bb2946f4 100644 --- a/packages/stream_chat_flutter/lib/src/message_text.dart +++ b/packages/stream_chat_flutter/lib/src/message_text.dart @@ -1,9 +1,7 @@ import 'package:collection/collection.dart' show IterableExtension; import 'package:flutter/material.dart'; import 'package:flutter_markdown/flutter_markdown.dart'; -import 'package:stream_chat_flutter/src/theme/themes.dart'; import 'package:stream_chat_flutter/stream_chat_flutter.dart'; -import 'package:stream_chat_flutter_core/stream_chat_flutter_core.dart'; /// Text widget to display in message class MessageText extends StatelessWidget { diff --git a/packages/stream_chat_flutter/lib/src/message_widget.dart b/packages/stream_chat_flutter/lib/src/message_widget.dart index 4010b11b..63f4e805 100644 --- a/packages/stream_chat_flutter/lib/src/message_widget.dart +++ b/packages/stream_chat_flutter/lib/src/message_widget.dart @@ -1,21 +1,13 @@ -import 'dart:ui'; - -import 'package:flutter/cupertino.dart'; -import 'package:flutter/foundation.dart'; import 'package:flutter/material.dart'; -import 'package:flutter/rendering.dart'; import 'package:flutter/services.dart'; import 'package:flutter_portal/flutter_portal.dart'; -import 'package:jiffy/jiffy.dart'; import 'package:stream_chat_flutter/src/attachment/url_attachment.dart'; import 'package:stream_chat_flutter/src/extension.dart'; import 'package:stream_chat_flutter/src/image_group.dart'; -import 'package:stream_chat_flutter/src/message_action.dart'; import 'package:stream_chat_flutter/src/message_actions_modal.dart'; import 'package:stream_chat_flutter/src/message_reactions_modal.dart'; import 'package:stream_chat_flutter/src/quoted_message_widget.dart'; import 'package:stream_chat_flutter/src/reaction_bubble.dart'; -import 'package:stream_chat_flutter/src/theme/themes.dart'; import 'package:stream_chat_flutter/stream_chat_flutter.dart'; /// Widget builder for building attachments diff --git a/packages/stream_chat_flutter/lib/src/quoted_message_widget.dart b/packages/stream_chat_flutter/lib/src/quoted_message_widget.dart index 14abc121..131ca60b 100644 --- a/packages/stream_chat_flutter/lib/src/quoted_message_widget.dart +++ b/packages/stream_chat_flutter/lib/src/quoted_message_widget.dart @@ -1,9 +1,7 @@ import 'package:cached_network_image/cached_network_image.dart'; import 'package:flutter/material.dart'; import 'package:stream_chat_flutter/src/extension.dart'; -import 'package:stream_chat_flutter/src/theme/themes.dart'; import 'package:stream_chat_flutter/stream_chat_flutter.dart'; -import 'package:stream_chat_flutter_core/stream_chat_flutter_core.dart'; import 'package:video_player/video_player.dart'; /// Widget builder for quoted message attachment thumnail diff --git a/packages/stream_chat_flutter/lib/src/reaction_bubble.dart b/packages/stream_chat_flutter/lib/src/reaction_bubble.dart index 203b8481..dd3d5e27 100644 --- a/packages/stream_chat_flutter/lib/src/reaction_bubble.dart +++ b/packages/stream_chat_flutter/lib/src/reaction_bubble.dart @@ -2,9 +2,6 @@ import 'dart:math'; import 'package:collection/collection.dart' show IterableExtension; import 'package:flutter/material.dart'; -import 'package:flutter/rendering.dart'; -import 'package:flutter/widgets.dart'; -import 'package:stream_chat_flutter/src/reaction_icon.dart'; import 'package:stream_chat_flutter/stream_chat_flutter.dart'; /// Creates reaction bubble widget for displaying over messages diff --git a/packages/stream_chat_flutter/lib/src/stream_chat.dart b/packages/stream_chat_flutter/lib/src/stream_chat.dart index 327a0927..cf18e282 100644 --- a/packages/stream_chat_flutter/lib/src/stream_chat.dart +++ b/packages/stream_chat_flutter/lib/src/stream_chat.dart @@ -1,12 +1,8 @@ import 'dart:async'; -import 'package:flutter/foundation.dart'; import 'package:flutter/material.dart'; import 'package:flutter_portal/flutter_portal.dart'; -import 'package:jiffy/jiffy.dart'; -import 'package:stream_chat_flutter/src/stream_chat_theme.dart'; import 'package:stream_chat_flutter/stream_chat_flutter.dart'; -import 'package:stream_chat_flutter_core/stream_chat_flutter_core.dart'; /// Widget used to provide information about the chat to the widget tree /// diff --git a/packages/stream_chat_flutter/lib/src/stream_chat_theme.dart b/packages/stream_chat_flutter/lib/src/stream_chat_theme.dart index 23d913cb..563f3c50 100644 --- a/packages/stream_chat_flutter/lib/src/stream_chat_theme.dart +++ b/packages/stream_chat_flutter/lib/src/stream_chat_theme.dart @@ -1,12 +1,5 @@ -import 'package:flutter/foundation.dart'; import 'package:flutter/material.dart' hide TextTheme; -import 'package:stream_chat_flutter/src/channel_preview.dart'; -import 'package:stream_chat_flutter/src/gradient_avatar.dart'; -import 'package:stream_chat_flutter/src/message_input.dart'; -import 'package:stream_chat_flutter/src/reaction_icon.dart'; -import 'package:stream_chat_flutter/src/theme/themes.dart'; import 'package:stream_chat_flutter/stream_chat_flutter.dart'; -import 'package:stream_chat_flutter_core/stream_chat_flutter_core.dart'; /// Inherited widget providing the [StreamChatThemeData] to the widget tree class StreamChatTheme extends InheritedWidget { diff --git a/packages/stream_chat_flutter/lib/src/stream_svg_icon.dart b/packages/stream_chat_flutter/lib/src/stream_svg_icon.dart index 73c33131..06b3b9a4 100644 --- a/packages/stream_chat_flutter/lib/src/stream_svg_icon.dart +++ b/packages/stream_chat_flutter/lib/src/stream_svg_icon.dart @@ -1,4 +1,3 @@ -import 'package:flutter/foundation.dart'; import 'package:flutter/material.dart'; import 'package:flutter_svg/flutter_svg.dart'; diff --git a/packages/stream_chat_flutter/lib/src/thread_header.dart b/packages/stream_chat_flutter/lib/src/thread_header.dart index dfe13b41..aae1d8f9 100644 --- a/packages/stream_chat_flutter/lib/src/thread_header.dart +++ b/packages/stream_chat_flutter/lib/src/thread_header.dart @@ -1,9 +1,7 @@ import 'package:flutter/material.dart'; import 'package:flutter/services.dart'; import 'package:stream_chat_flutter/src/extension.dart'; -import 'package:stream_chat_flutter/src/stream_chat_theme.dart'; import 'package:stream_chat_flutter/stream_chat_flutter.dart'; -import 'package:stream_chat_flutter_core/stream_chat_flutter_core.dart'; /// ![screenshot](https://raw.githubusercontent.com/GetStream/stream-chat-flutter/master/packages/stream_chat_flutter/screenshots/thread_header.png) /// ![screenshot](https://raw.githubusercontent.com/GetStream/stream-chat-flutter/master/packages/stream_chat_flutter/screenshots/thread_header_paint.png) diff --git a/packages/stream_chat_flutter/lib/src/unread_indicator.dart b/packages/stream_chat_flutter/lib/src/unread_indicator.dart index e5f3027b..958386d1 100644 --- a/packages/stream_chat_flutter/lib/src/unread_indicator.dart +++ b/packages/stream_chat_flutter/lib/src/unread_indicator.dart @@ -1,5 +1,4 @@ import 'package:flutter/material.dart'; -import 'package:stream_chat_flutter/src/stream_chat_theme.dart'; import 'package:stream_chat_flutter/stream_chat_flutter.dart'; /// Widget for showing an unread indicator diff --git a/packages/stream_chat_flutter/lib/src/user_avatar.dart b/packages/stream_chat_flutter/lib/src/user_avatar.dart index 86b34ea7..e638685c 100644 --- a/packages/stream_chat_flutter/lib/src/user_avatar.dart +++ b/packages/stream_chat_flutter/lib/src/user_avatar.dart @@ -1,7 +1,6 @@ import 'package:cached_network_image/cached_network_image.dart'; import 'package:flutter/material.dart'; import 'package:stream_chat_flutter/stream_chat_flutter.dart'; -import 'package:stream_chat_flutter_core/stream_chat_flutter_core.dart'; /// Widget that displays a user avatar class UserAvatar extends StatelessWidget { diff --git a/packages/stream_chat_flutter/lib/src/user_item.dart b/packages/stream_chat_flutter/lib/src/user_item.dart index cbaa0820..c0e3482e 100644 --- a/packages/stream_chat_flutter/lib/src/user_item.dart +++ b/packages/stream_chat_flutter/lib/src/user_item.dart @@ -1,10 +1,6 @@ import 'package:flutter/material.dart'; -import 'package:jiffy/jiffy.dart'; import 'package:stream_chat_flutter/src/extension.dart'; -import 'package:stream_chat_flutter/src/stream_svg_icon.dart'; -import 'package:stream_chat_flutter/src/user_list_view.dart'; import 'package:stream_chat_flutter/stream_chat_flutter.dart'; -import 'package:stream_chat_flutter_core/stream_chat_flutter_core.dart'; /// /// It shows the current [User] preview. diff --git a/packages/stream_chat_flutter/lib/src/user_list_view.dart b/packages/stream_chat_flutter/lib/src/user_list_view.dart index 8697381a..58af30a7 100644 --- a/packages/stream_chat_flutter/lib/src/user_list_view.dart +++ b/packages/stream_chat_flutter/lib/src/user_list_view.dart @@ -1,8 +1,6 @@ import 'package:flutter/material.dart'; import 'package:stream_chat_flutter/src/extension.dart'; -import 'package:stream_chat_flutter/src/theme/themes.dart'; import 'package:stream_chat_flutter/stream_chat_flutter.dart'; -import 'package:stream_chat_flutter_core/stream_chat_flutter_core.dart'; /// Callback called when tapping on a user typedef UserTapCallback = void Function(User, Widget?); diff --git a/packages/stream_chat_flutter/lib/src/utils.dart b/packages/stream_chat_flutter/lib/src/utils.dart index b4ca48f0..2d661fbc 100644 --- a/packages/stream_chat_flutter/lib/src/utils.dart +++ b/packages/stream_chat_flutter/lib/src/utils.dart @@ -4,7 +4,6 @@ import 'dart:math' as math; import 'package:flutter/material.dart'; import 'package:stream_chat_flutter/src/extension.dart'; import 'package:stream_chat_flutter/stream_chat_flutter.dart'; -import 'package:stream_chat_flutter_core/stream_chat_flutter_core.dart'; import 'package:url_launcher/url_launcher.dart'; /// Launch URL diff --git a/packages/stream_chat_flutter/lib/src/visible_footnote.dart b/packages/stream_chat_flutter/lib/src/visible_footnote.dart index 18bb976d..700e22ad 100644 --- a/packages/stream_chat_flutter/lib/src/visible_footnote.dart +++ b/packages/stream_chat_flutter/lib/src/visible_footnote.dart @@ -1,6 +1,5 @@ import 'package:flutter/material.dart'; import 'package:stream_chat_flutter/src/extension.dart'; -import 'package:stream_chat_flutter/src/stream_chat_theme.dart'; import 'package:stream_chat_flutter/stream_chat_flutter.dart'; /// Widget for displaying a footnote diff --git a/packages/stream_chat_flutter/test/scrollable_positioned_list/horizontal_scrollable_positioned_list_test.dart b/packages/stream_chat_flutter/test/scrollable_positioned_list/horizontal_scrollable_positioned_list_test.dart index d32f3969..fb5c9fc2 100644 --- a/packages/stream_chat_flutter/test/scrollable_positioned_list/horizontal_scrollable_positioned_list_test.dart +++ b/packages/stream_chat_flutter/test/scrollable_positioned_list/horizontal_scrollable_positioned_list_test.dart @@ -3,7 +3,6 @@ // found in the LICENSE file. import 'dart:async'; -import 'dart:ui'; import 'package:flutter/material.dart'; import 'package:flutter_test/flutter_test.dart'; diff --git a/packages/stream_chat_flutter/test/scrollable_positioned_list/reversed_scrollable_positioned_list_test.dart b/packages/stream_chat_flutter/test/scrollable_positioned_list/reversed_scrollable_positioned_list_test.dart index b0c487ea..a5af56a8 100644 --- a/packages/stream_chat_flutter/test/scrollable_positioned_list/reversed_scrollable_positioned_list_test.dart +++ b/packages/stream_chat_flutter/test/scrollable_positioned_list/reversed_scrollable_positioned_list_test.dart @@ -3,7 +3,6 @@ // found in the LICENSE file. import 'dart:async'; -import 'dart:ui'; import 'package:flutter/material.dart'; import 'package:flutter_test/flutter_test.dart'; diff --git a/packages/stream_chat_flutter/test/scrollable_positioned_list/scrollable_positioned_list_test.dart b/packages/stream_chat_flutter/test/scrollable_positioned_list/scrollable_positioned_list_test.dart index 5c4f22f1..79845215 100644 --- a/packages/stream_chat_flutter/test/scrollable_positioned_list/scrollable_positioned_list_test.dart +++ b/packages/stream_chat_flutter/test/scrollable_positioned_list/scrollable_positioned_list_test.dart @@ -4,11 +4,9 @@ import 'dart:async'; import 'dart:math'; -import 'dart:ui'; import 'package:flutter/material.dart'; import 'package:flutter/rendering.dart'; -import 'package:flutter/widgets.dart'; import 'package:flutter_test/flutter_test.dart'; import 'package:stream_chat_flutter/scrollable_positioned_list/scrollable_positioned_list.dart'; import 'package:stream_chat_flutter/scrollable_positioned_list/src/scroll_view.dart'; diff --git a/packages/stream_chat_flutter/test/scrollable_positioned_list/separated_scrollable_positioned_list_test.dart b/packages/stream_chat_flutter/test/scrollable_positioned_list/separated_scrollable_positioned_list_test.dart index 0cc091c9..df1035e2 100644 --- a/packages/stream_chat_flutter/test/scrollable_positioned_list/separated_scrollable_positioned_list_test.dart +++ b/packages/stream_chat_flutter/test/scrollable_positioned_list/separated_scrollable_positioned_list_test.dart @@ -3,7 +3,6 @@ // found in the LICENSE file. import 'dart:async'; -import 'dart:ui'; import 'package:flutter/material.dart'; import 'package:flutter_test/flutter_test.dart'; diff --git a/packages/stream_chat_flutter/test/scrollable_positioned_list/seperated_horizontal_scrollable_positioned_list_test.dart b/packages/stream_chat_flutter/test/scrollable_positioned_list/seperated_horizontal_scrollable_positioned_list_test.dart index 55574003..c26ee43f 100644 --- a/packages/stream_chat_flutter/test/scrollable_positioned_list/seperated_horizontal_scrollable_positioned_list_test.dart +++ b/packages/stream_chat_flutter/test/scrollable_positioned_list/seperated_horizontal_scrollable_positioned_list_test.dart @@ -3,7 +3,6 @@ // found in the LICENSE file. import 'dart:async'; -import 'dart:ui'; import 'package:flutter/material.dart'; import 'package:flutter_test/flutter_test.dart'; diff --git a/packages/stream_chat_flutter/test/src/attachment_actions_modal_test.dart b/packages/stream_chat_flutter/test/src/attachment_actions_modal_test.dart index c8832f6f..3b711a85 100644 --- a/packages/stream_chat_flutter/test/src/attachment_actions_modal_test.dart +++ b/packages/stream_chat_flutter/test/src/attachment_actions_modal_test.dart @@ -3,7 +3,6 @@ import 'dart:async'; import 'package:flutter/material.dart'; import 'package:flutter_test/flutter_test.dart'; import 'package:mocktail/mocktail.dart'; -import 'package:stream_chat_flutter/src/attachment_actions_modal.dart'; import 'package:stream_chat_flutter/stream_chat_flutter.dart'; import 'mocks.dart'; diff --git a/packages/stream_chat_flutter/test/src/back_button_test.dart b/packages/stream_chat_flutter/test/src/back_button_test.dart index efb889ac..fca30c5b 100644 --- a/packages/stream_chat_flutter/test/src/back_button_test.dart +++ b/packages/stream_chat_flutter/test/src/back_button_test.dart @@ -1,7 +1,6 @@ import 'package:flutter/material.dart'; import 'package:flutter_test/flutter_test.dart'; import 'package:mocktail/mocktail.dart'; -import 'package:stream_chat_flutter/src/back_button.dart'; import 'package:stream_chat_flutter/stream_chat_flutter.dart'; import 'mocks.dart'; diff --git a/packages/stream_chat_flutter/test/src/gradient_avatar_test.dart b/packages/stream_chat_flutter/test/src/gradient_avatar_test.dart index 6f7ebe2e..6dcc0e2d 100644 --- a/packages/stream_chat_flutter/test/src/gradient_avatar_test.dart +++ b/packages/stream_chat_flutter/test/src/gradient_avatar_test.dart @@ -2,7 +2,6 @@ import 'package:flutter/material.dart'; import 'package:flutter_test/flutter_test.dart'; import 'package:golden_toolkit/golden_toolkit.dart'; import 'package:mocktail/mocktail.dart'; -import 'package:stream_chat_flutter/src/gradient_avatar.dart'; import 'package:stream_chat_flutter/stream_chat_flutter.dart'; import 'mocks.dart'; diff --git a/packages/stream_chat_flutter/test/utils/golden.dart b/packages/stream_chat_flutter/test/utils/golden.dart index 4fc0aff3..574306ef 100644 --- a/packages/stream_chat_flutter/test/utils/golden.dart +++ b/packages/stream_chat_flutter/test/utils/golden.dart @@ -1,4 +1,3 @@ -import 'dart:async'; import 'dart:typed_data'; import 'package:flutter/foundation.dart'; diff --git a/packages/stream_chat_flutter_core/lib/src/message_list_core.dart b/packages/stream_chat_flutter_core/lib/src/message_list_core.dart index 74e40d7f..a28d6d73 100644 --- a/packages/stream_chat_flutter_core/lib/src/message_list_core.dart +++ b/packages/stream_chat_flutter_core/lib/src/message_list_core.dart @@ -2,7 +2,6 @@ import 'dart:async'; import 'package:collection/collection.dart'; import 'package:flutter/cupertino.dart'; -import 'package:flutter/foundation.dart'; import 'package:flutter/material.dart'; import 'package:stream_chat/stream_chat.dart'; import 'package:stream_chat_flutter_core/src/better_stream_builder.dart'; diff --git a/packages/stream_chat_flutter_core/lib/src/stream_chat_core.dart b/packages/stream_chat_flutter_core/lib/src/stream_chat_core.dart index 3d00b739..1f3f753d 100644 --- a/packages/stream_chat_flutter_core/lib/src/stream_chat_core.dart +++ b/packages/stream_chat_flutter_core/lib/src/stream_chat_core.dart @@ -1,7 +1,6 @@ import 'dart:async'; import 'package:connectivity_plus/connectivity_plus.dart'; -import 'package:flutter/foundation.dart'; import 'package:flutter/material.dart'; import 'package:stream_chat/stream_chat.dart'; import 'package:stream_chat_flutter_core/src/typedef.dart'; diff --git a/packages/stream_chat_flutter_core/lib/src/user_list_core.dart b/packages/stream_chat_flutter_core/lib/src/user_list_core.dart index 05e9730b..61fbb860 100644 --- a/packages/stream_chat_flutter_core/lib/src/user_list_core.dart +++ b/packages/stream_chat_flutter_core/lib/src/user_list_core.dart @@ -2,8 +2,6 @@ import 'dart:convert'; import 'package:flutter/foundation.dart'; import 'package:flutter/material.dart'; -import 'package:stream_chat/stream_chat.dart'; -import 'package:stream_chat_flutter_core/src/users_bloc.dart'; import 'package:stream_chat_flutter_core/stream_chat_flutter_core.dart'; /// diff --git a/packages/stream_chat_flutter_core/test/message_search_bloc_test.dart b/packages/stream_chat_flutter_core/test/message_search_bloc_test.dart index 332289ea..764e629b 100644 --- a/packages/stream_chat_flutter_core/test/message_search_bloc_test.dart +++ b/packages/stream_chat_flutter_core/test/message_search_bloc_test.dart @@ -1,8 +1,6 @@ import 'package:flutter/widgets.dart'; import 'package:flutter_test/flutter_test.dart'; import 'package:mocktail/mocktail.dart'; -import 'package:stream_chat/stream_chat.dart'; -import 'package:stream_chat_flutter_core/src/message_search_bloc.dart'; import 'package:stream_chat_flutter_core/stream_chat_flutter_core.dart'; import 'matchers/get_message_response_matcher.dart'; diff --git a/packages/stream_chat_flutter_core/test/stream_channel_test.dart b/packages/stream_chat_flutter_core/test/stream_channel_test.dart index de536cb5..cccea24d 100644 --- a/packages/stream_chat_flutter_core/test/stream_channel_test.dart +++ b/packages/stream_chat_flutter_core/test/stream_channel_test.dart @@ -1,7 +1,4 @@ -import 'dart:async'; - import 'package:flutter/material.dart'; -import 'package:flutter/widgets.dart'; import 'package:flutter_test/flutter_test.dart'; import 'package:mocktail/mocktail.dart'; import 'package:stream_chat_flutter_core/stream_chat_flutter_core.dart'; diff --git a/packages/stream_chat_flutter_core/test/stream_chat_core_test.dart b/packages/stream_chat_flutter_core/test/stream_chat_core_test.dart index addcab87..7dd433be 100644 --- a/packages/stream_chat_flutter_core/test/stream_chat_core_test.dart +++ b/packages/stream_chat_flutter_core/test/stream_chat_core_test.dart @@ -1,6 +1,5 @@ import 'dart:async'; -import 'package:connectivity_plus/connectivity_plus.dart'; import 'package:flutter/material.dart'; import 'package:flutter_test/flutter_test.dart'; import 'package:mocktail/mocktail.dart'; diff --git a/packages/stream_chat_localizations/lib/src/stream_chat_localizations_hi.dart b/packages/stream_chat_localizations/lib/src/stream_chat_localizations_hi.dart index 0d7e1ec0..10f1858b 100644 --- a/packages/stream_chat_localizations/lib/src/stream_chat_localizations_hi.dart +++ b/packages/stream_chat_localizations/lib/src/stream_chat_localizations_hi.dart @@ -340,10 +340,10 @@ class StreamChatLocalizationsHi extends GlobalStreamChatLocalizations { String get sendLabel => 'भेजें'; @override - String get withText => 'विद'; //TODO: break? + String get withText => 'विद'; @override - String get inText => 'इन'; //TODO: break? + String get inText => 'इन'; @override String get youText => 'आप'; diff --git a/packages/stream_chat_persistence/lib/src/stream_chat_persistence_client.dart b/packages/stream_chat_persistence/lib/src/stream_chat_persistence_client.dart index 00c4ab06..2dc61f18 100644 --- a/packages/stream_chat_persistence/lib/src/stream_chat_persistence_client.dart +++ b/packages/stream_chat_persistence/lib/src/stream_chat_persistence_client.dart @@ -1,6 +1,5 @@ import 'package:flutter/foundation.dart'; import 'package:logging/logging.dart' show LogRecord; -import 'package:meta/meta.dart'; import 'package:mutex/mutex.dart'; import 'package:stream_chat/stream_chat.dart'; From 39bb5aa97e1c723342eb990114103b753e830d26 Mon Sep 17 00:00:00 2001 From: Salvatore Giordano Date: Mon, 31 Jan 2022 13:34:33 +0100 Subject: [PATCH 16/17] chore(repo): fix metrics --- .github/workflows/dart_code_metrics.yaml | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/.github/workflows/dart_code_metrics.yaml b/.github/workflows/dart_code_metrics.yaml index 667ac2dd..63ec9484 100644 --- a/.github/workflows/dart_code_metrics.yaml +++ b/.github/workflows/dart_code_metrics.yaml @@ -1,8 +1,9 @@ name: Dart Code Metrics env: - flutter_version: "2.5.0" + flutter_version: "2.8.1" folders: "lib, test" + melos_version: "1.2.0" on: pull_request: @@ -33,7 +34,7 @@ jobs: flutter-version: ${{ env.flutter_version }} - name: "Install Tools" - run: flutter pub global activate melos 1.0.0-dev.10 + run: flutter pub global activate melos ${{ env.melos_version }} - name: "Bootstrap Workspace" run: melos bootstrap From 331d895fa4b8355ef5363215a259cb850410b385 Mon Sep 17 00:00:00 2001 From: Sahil Kumar Date: Tue, 1 Feb 2022 14:08:12 +0530 Subject: [PATCH 17/17] test(llc): add tests Signed-off-by: xsahil03x --- .../test/src/client/channel_test.dart | 30 ++++++++++++++++++ .../test/src/client/client_test.dart | 31 +++++++++++++++++++ 2 files changed, 61 insertions(+) diff --git a/packages/stream_chat/test/src/client/channel_test.dart b/packages/stream_chat/test/src/client/channel_test.dart index 912e11d3..adbfb388 100644 --- a/packages/stream_chat/test/src/client/channel_test.dart +++ b/packages/stream_chat/test/src/client/channel_test.dart @@ -1,5 +1,6 @@ import 'package:mocktail/mocktail.dart'; import 'package:stream_chat/src/client/retry_policy.dart'; +import 'package:stream_chat/src/core/models/banned_user.dart'; import 'package:stream_chat/stream_chat.dart'; import 'package:test/test.dart'; @@ -1962,6 +1963,35 @@ void main() { )).called(1); }); + test('`.queryBannedUsers`', () async { + final filter = Filter.equal('channel_cid', channelCid); + + final bans = List.generate( + 3, + (index) => BannedUser( + user: User(id: 'test-user-id-$index'), + bannedBy: User(id: 'test-user-id-${index + 1}'), + ), + ); + + when(() => client.queryBannedUsers( + filter: filter, + sort: any(named: 'sort'), + pagination: any(named: 'pagination'), + )).thenAnswer((_) async => QueryBannedUsersResponse()..bans = bans); + + final res = await channel.queryBannedUsers(); + + expect(res, isNotNull); + expect(res.bans.length, bans.length); + + verify(() => client.queryBannedUsers( + filter: filter, + sort: any(named: 'sort'), + pagination: any(named: 'pagination'), + )).called(1); + }); + test('`.mute`', () async { when(() => client.muteChannel( channelCid, diff --git a/packages/stream_chat/test/src/client/client_test.dart b/packages/stream_chat/test/src/client/client_test.dart index 22e0edf8..b89db0dc 100644 --- a/packages/stream_chat/test/src/client/client_test.dart +++ b/packages/stream_chat/test/src/client/client_test.dart @@ -1,6 +1,7 @@ import 'package:mocktail/mocktail.dart'; import 'package:stream_chat/src/core/api/device_api.dart'; import 'package:stream_chat/src/core/http/token.dart'; +import 'package:stream_chat/src/core/models/banned_user.dart'; import 'package:stream_chat/stream_chat.dart'; import 'package:test/test.dart'; @@ -982,6 +983,36 @@ void main() { verifyNoMoreInteractions(api.user); }); + test('`.queryBannedUsers`', () async { + final bans = List.generate( + 3, + (index) => BannedUser( + user: User(id: 'test-user-id-$index'), + bannedBy: User(id: 'test-user-id-${index + 1}'), + ), + ); + + const cid = 'message:nice-channel'; + final filter = Filter.equal('channel_cid', cid); + + when(() => api.moderation.queryBannedUsers( + filter: filter, + sort: any(named: 'sort'), + pagination: any(named: 'pagination'), + )).thenAnswer((_) async => QueryBannedUsersResponse()..bans = bans); + + final res = await client.queryBannedUsers(filter: filter); + expect(res, isNotNull); + expect(res.bans.length, bans.length); + + verify(() => api.moderation.queryBannedUsers( + filter: filter, + sort: any(named: 'sort'), + pagination: any(named: 'pagination'), + )).called(1); + verifyNoMoreInteractions(api.moderation); + }); + test('`.search`', () async { const cid = 'test-type:test-id'; final filter = Filter.in_('cid', const [cid]);