diff --git a/packages/stream_chat/CHANGELOG.md b/packages/stream_chat/CHANGELOG.md index 8e54b7c1..3b6578f5 100644 --- a/packages/stream_chat/CHANGELOG.md +++ b/packages/stream_chat/CHANGELOG.md @@ -8,6 +8,7 @@ - `closeConnection()` now uses `normalClosure` status when closing websocket. - Fixed local unread count indicator increasing for thread replies +- Fixed user presence indicator not updating correctly ## 3.2.0 diff --git a/packages/stream_chat/lib/src/core/models/user.dart b/packages/stream_chat/lib/src/core/models/user.dart index 44df4399..7aa7c51c 100644 --- a/packages/stream_chat/lib/src/core/models/user.dart +++ b/packages/stream_chat/lib/src/core/models/user.dart @@ -179,5 +179,14 @@ class User extends Equatable { ); @override - List get props => [id, role]; + List get props => [ + id, + role, + lastActive, + online, + extraData, + banned, + teams, + language, + ]; } diff --git a/packages/stream_chat/test/src/core/models/reaction_test.dart b/packages/stream_chat/test/src/core/models/reaction_test.dart index fbe493ef..285d8a46 100644 --- a/packages/stream_chat/test/src/core/models/reaction_test.dart +++ b/packages/stream_chat/test/src/core/models/reaction_test.dart @@ -70,13 +70,19 @@ void main() { expect( newReaction.extraData, {'updated_at': '2020-01-28T22:17:31.108742Z'}); + final newUserCreateTime = DateTime.now(); + newReaction = reaction.copyWith( type: 'lol', createdAt: DateTime.parse('2021-01-28T22:17:31.108742Z'), extraData: {}, messageId: 'test', score: 2, - user: User(id: 'test'), + user: User( + id: 'test', + createdAt: newUserCreateTime, + updatedAt: newUserCreateTime, + ), userId: 'test', ); @@ -88,12 +94,21 @@ void main() { expect(newReaction.extraData, {}); expect(newReaction.messageId, 'test'); expect(newReaction.score, 2); - expect(newReaction.user, User(id: 'test')); + expect( + newReaction.user, + User( + id: 'test', + createdAt: newUserCreateTime, + updatedAt: newUserCreateTime, + ), + ); expect(newReaction.userId, 'test'); }); test('merge', () { final reaction = Reaction.fromJson(jsonFixture('reaction.json')); + final newUserCreateTime = DateTime.now(); + final newReaction = reaction.merge( Reaction( type: 'lol', @@ -101,7 +116,11 @@ void main() { extraData: {}, messageId: 'test', score: 2, - user: User(id: 'test'), + user: User( + id: 'test', + createdAt: newUserCreateTime, + updatedAt: newUserCreateTime, + ), userId: 'test', ), ); @@ -114,7 +133,14 @@ void main() { expect(newReaction.extraData, {}); expect(newReaction.messageId, 'test'); expect(newReaction.score, 2); - expect(newReaction.user, User(id: 'test')); + expect( + newReaction.user, + User( + id: 'test', + createdAt: newUserCreateTime, + updatedAt: newUserCreateTime, + ), + ); expect(newReaction.userId, 'test'); }); }); diff --git a/packages/stream_chat_flutter/CHANGELOG.md b/packages/stream_chat_flutter/CHANGELOG.md index a94eaaea..fa6af474 100644 --- a/packages/stream_chat_flutter/CHANGELOG.md +++ b/packages/stream_chat_flutter/CHANGELOG.md @@ -12,6 +12,7 @@ - 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. +- Fixed user presence indicator not updating correctly ## 3.2.0 diff --git a/packages/stream_chat_flutter/lib/src/channel_info.dart b/packages/stream_chat_flutter/lib/src/channel_info.dart index 6bd61dad..62bfd1de 100644 --- a/packages/stream_chat_flutter/lib/src/channel_info.dart +++ b/packages/stream_chat_flutter/lib/src/channel_info.dart @@ -59,9 +59,10 @@ class ChannelInfo extends StatelessWidget { final memberCount = channel.memberCount; if (memberCount != null && memberCount > 2) { var text = context.translations.membersCountText(memberCount); - final watcherCount = channel.state?.watcherCount ?? 0; - if (watcherCount > 0) { - text += ' ${context.translations.watchersCountText(watcherCount)}'; + final onlineCount = + members?.where((m) => m.user?.online == true).length ?? 0; + if (onlineCount > 0) { + text += ', ${context.translations.watchersCountText(onlineCount)}'; } alternativeWidget = Text( text, diff --git a/packages/stream_chat_flutter/lib/src/group_avatar.dart b/packages/stream_chat_flutter/lib/src/group_avatar.dart index 4a16279e..bf599c63 100644 --- a/packages/stream_chat_flutter/lib/src/group_avatar.dart +++ b/packages/stream_chat_flutter/lib/src/group_avatar.dart @@ -81,6 +81,7 @@ class GroupAvatar extends StatelessWidget { ), initialData: member, builder: (context, member) => UserAvatar( + showOnlineStatus: false, user: member.user!, borderRadius: BorderRadius.zero, ), @@ -118,6 +119,7 @@ class GroupAvatar extends StatelessWidget { ), initialData: member, builder: (context, member) => UserAvatar( + showOnlineStatus: false, user: member.user!, borderRadius: BorderRadius.zero, ), diff --git a/packages/stream_chat_flutter/lib/src/message_input.dart b/packages/stream_chat_flutter/lib/src/message_input.dart index a08c799b..b880198c 100644 --- a/packages/stream_chat_flutter/lib/src/message_input.dart +++ b/packages/stream_chat_flutter/lib/src/message_input.dart @@ -323,6 +323,8 @@ class MessageInput extends StatefulWidget { /// Defaults to false. final bool mentionAllAppUsers; + /// Defines if the [MessageInput] loses focuses after a message is sent. + /// The default behaviour keeps focus until a command is enabled. final bool? shouldKeepFocusAfterMessage; @override diff --git a/packages/stream_chat_persistence/test/src/dao/user_dao_test.dart b/packages/stream_chat_persistence/test/src/dao/user_dao_test.dart index fb095e36..f5a40dbc 100644 --- a/packages/stream_chat_persistence/test/src/dao/user_dao_test.dart +++ b/packages/stream_chat_persistence/test/src/dao/user_dao_test.dart @@ -45,7 +45,6 @@ void main() { role: 'testRole', createdAt: DateTime.now(), updatedAt: DateTime.now(), - lastActive: DateTime.now(), online: math.Random().nextBool(), banned: math.Random().nextBool(), );