@@ -166,15 +166,17 @@ class ChannelImage extends StatelessWidget {
|
|||||||
// 1-1 Conversation
|
// 1-1 Conversation
|
||||||
if (otherMembers.length == 1) {
|
if (otherMembers.length == 1) {
|
||||||
final member = otherMembers.first;
|
final member = otherMembers.first;
|
||||||
final user = member.user!;
|
return BetterStreamBuilder<Member>(
|
||||||
return BetterStreamBuilder<User>(
|
stream: channel.state!.membersStream.map(
|
||||||
stream: streamChat.client.state.usersStream
|
(members) => members.firstWhere(
|
||||||
.map((users) => users[member.userId ?? user.id] ?? user)
|
(it) => it.userId == member.userId,
|
||||||
.distinct(),
|
orElse: () => member,
|
||||||
initialData: user,
|
),
|
||||||
builder: (context, user) => UserAvatar(
|
),
|
||||||
|
initialData: member,
|
||||||
|
builder: (context, member) => UserAvatar(
|
||||||
borderRadius: borderRadius ?? previewTheme?.borderRadius,
|
borderRadius: borderRadius ?? previewTheme?.borderRadius,
|
||||||
user: user,
|
user: member.user!,
|
||||||
constraints: constraints ?? previewTheme?.constraints,
|
constraints: constraints ?? previewTheme?.constraints,
|
||||||
onTap: onTap != null ? (_) => onTap!() : null,
|
onTap: onTap != null ? (_) => onTap!() : null,
|
||||||
selected: selected,
|
selected: selected,
|
||||||
|
|||||||
@@ -38,7 +38,6 @@ class GroupImage extends StatelessWidget {
|
|||||||
|
|
||||||
@override
|
@override
|
||||||
Widget build(BuildContext context) {
|
Widget build(BuildContext context) {
|
||||||
final streamChat = StreamChat.of(context);
|
|
||||||
final channel = StreamChannel.of(context).channel;
|
final channel = StreamChannel.of(context).channel;
|
||||||
|
|
||||||
assert(channel.state != null, 'Channel ${channel.id} is not initialized');
|
assert(channel.state != null, 'Channel ${channel.id} is not initialized');
|
||||||
@@ -63,30 +62,34 @@ class GroupImage extends StatelessWidget {
|
|||||||
child: Flex(
|
child: Flex(
|
||||||
direction: Axis.horizontal,
|
direction: Axis.horizontal,
|
||||||
crossAxisAlignment: CrossAxisAlignment.stretch,
|
crossAxisAlignment: CrossAxisAlignment.stretch,
|
||||||
children: members.take(2).map((member) {
|
children: members
|
||||||
final user = member.user!;
|
.take(2)
|
||||||
return Flexible(
|
.map(
|
||||||
fit: FlexFit.tight,
|
(member) => Flexible(
|
||||||
child: FittedBox(
|
fit: FlexFit.tight,
|
||||||
fit: BoxFit.cover,
|
child: FittedBox(
|
||||||
clipBehavior: Clip.antiAlias,
|
fit: BoxFit.cover,
|
||||||
child: Transform.scale(
|
clipBehavior: Clip.antiAlias,
|
||||||
scale: 1.2,
|
child: Transform.scale(
|
||||||
child: BetterStreamBuilder<User>(
|
scale: 1.2,
|
||||||
stream: streamChat.client.state.usersStream
|
child: BetterStreamBuilder<Member>(
|
||||||
.map((users) =>
|
stream: channel.state!.membersStream.map(
|
||||||
users[member.userId ?? user.id] ?? user)
|
(members) => members.firstWhere(
|
||||||
.distinct(),
|
(it) => it.userId == member.userId,
|
||||||
initialData: user,
|
orElse: () => member,
|
||||||
builder: (context, user) => UserAvatar(
|
),
|
||||||
user: user,
|
),
|
||||||
borderRadius: BorderRadius.zero,
|
initialData: member,
|
||||||
|
builder: (context, member) => UserAvatar(
|
||||||
|
user: member.user!,
|
||||||
|
borderRadius: BorderRadius.zero,
|
||||||
|
),
|
||||||
|
),
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
),
|
)
|
||||||
);
|
.toList(),
|
||||||
}).toList(),
|
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
if (members.length > 2)
|
if (members.length > 2)
|
||||||
@@ -95,30 +98,35 @@ class GroupImage extends StatelessWidget {
|
|||||||
child: Flex(
|
child: Flex(
|
||||||
direction: Axis.horizontal,
|
direction: Axis.horizontal,
|
||||||
crossAxisAlignment: CrossAxisAlignment.stretch,
|
crossAxisAlignment: CrossAxisAlignment.stretch,
|
||||||
children: members.skip(2).take(2).map((member) {
|
children: members
|
||||||
final user = member.user!;
|
.skip(2)
|
||||||
return Flexible(
|
.take(2)
|
||||||
fit: FlexFit.tight,
|
.map(
|
||||||
child: FittedBox(
|
(member) => Flexible(
|
||||||
fit: BoxFit.cover,
|
fit: FlexFit.tight,
|
||||||
clipBehavior: Clip.antiAlias,
|
child: FittedBox(
|
||||||
child: Transform.scale(
|
fit: BoxFit.cover,
|
||||||
scale: 1.2,
|
clipBehavior: Clip.antiAlias,
|
||||||
child: BetterStreamBuilder<User>(
|
child: Transform.scale(
|
||||||
stream: streamChat.client.state.usersStream
|
scale: 1.2,
|
||||||
.map((users) =>
|
child: BetterStreamBuilder<Member>(
|
||||||
users[member.userId ?? user.id] ?? user)
|
stream: channel.state!.membersStream.map(
|
||||||
.distinct(),
|
(members) => members.firstWhere(
|
||||||
initialData: user,
|
(it) => it.userId == member.userId,
|
||||||
builder: (context, user) => UserAvatar(
|
orElse: () => member,
|
||||||
user: user,
|
),
|
||||||
borderRadius: BorderRadius.zero,
|
),
|
||||||
|
initialData: member,
|
||||||
|
builder: (context, member) => UserAvatar(
|
||||||
|
user: member.user!,
|
||||||
|
borderRadius: BorderRadius.zero,
|
||||||
|
),
|
||||||
|
),
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
),
|
)
|
||||||
);
|
.toList(),
|
||||||
}).toList(),
|
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
],
|
],
|
||||||
|
|||||||
@@ -14,10 +14,12 @@ void main() {
|
|||||||
final clientState = MockClientState();
|
final clientState = MockClientState();
|
||||||
final channel = MockChannel();
|
final channel = MockChannel();
|
||||||
final channelState = MockChannelState();
|
final channelState = MockChannelState();
|
||||||
|
final user = OwnUser(id: 'user-id');
|
||||||
final lastMessageAt = DateTime.parse('2020-06-22 12:00:00');
|
final lastMessageAt = DateTime.parse('2020-06-22 12:00:00');
|
||||||
|
|
||||||
when(() => client.state).thenReturn(clientState);
|
when(() => client.state).thenReturn(clientState);
|
||||||
when(() => clientState.user).thenReturn(OwnUser(id: 'user-id'));
|
when(() => clientState.user).thenReturn(user);
|
||||||
|
when(() => clientState.userStream).thenAnswer((_) => Stream.value(user));
|
||||||
when(() => channel.lastMessageAt).thenReturn(lastMessageAt);
|
when(() => channel.lastMessageAt).thenReturn(lastMessageAt);
|
||||||
when(() => channel.state).thenReturn(channelState);
|
when(() => channel.state).thenReturn(channelState);
|
||||||
when(() => channel.client).thenReturn(client);
|
when(() => channel.client).thenReturn(client);
|
||||||
@@ -76,10 +78,12 @@ void main() {
|
|||||||
final clientState = MockClientState();
|
final clientState = MockClientState();
|
||||||
final channel = MockChannel();
|
final channel = MockChannel();
|
||||||
final channelState = MockChannelState();
|
final channelState = MockChannelState();
|
||||||
|
final user = OwnUser(id: 'user-id');
|
||||||
final lastMessageAt = DateTime.parse('2020-06-22 12:00:00');
|
final lastMessageAt = DateTime.parse('2020-06-22 12:00:00');
|
||||||
|
|
||||||
when(() => client.state).thenReturn(clientState);
|
when(() => client.state).thenReturn(clientState);
|
||||||
when(() => clientState.user).thenReturn(OwnUser(id: 'user-id'));
|
when(() => clientState.user).thenReturn(user);
|
||||||
|
when(() => clientState.userStream).thenAnswer((_) => Stream.value(user));
|
||||||
when(() => channel.lastMessageAt).thenReturn(lastMessageAt);
|
when(() => channel.lastMessageAt).thenReturn(lastMessageAt);
|
||||||
when(() => channel.state).thenReturn(channelState);
|
when(() => channel.state).thenReturn(channelState);
|
||||||
when(() => channel.client).thenReturn(client);
|
when(() => channel.client).thenReturn(client);
|
||||||
@@ -141,10 +145,12 @@ void main() {
|
|||||||
final clientState = MockClientState();
|
final clientState = MockClientState();
|
||||||
final channel = MockChannel();
|
final channel = MockChannel();
|
||||||
final channelState = MockChannelState();
|
final channelState = MockChannelState();
|
||||||
|
final user = OwnUser(id: 'user-id');
|
||||||
final lastMessageAt = DateTime.parse('2020-06-22 12:00:00');
|
final lastMessageAt = DateTime.parse('2020-06-22 12:00:00');
|
||||||
|
|
||||||
when(() => client.state).thenReturn(clientState);
|
when(() => client.state).thenReturn(clientState);
|
||||||
when(() => clientState.user).thenReturn(OwnUser(id: 'user-id'));
|
when(() => clientState.user).thenReturn(user);
|
||||||
|
when(() => clientState.userStream).thenAnswer((_) => Stream.value(user));
|
||||||
when(() => channel.lastMessageAt).thenReturn(lastMessageAt);
|
when(() => channel.lastMessageAt).thenReturn(lastMessageAt);
|
||||||
when(() => channel.state).thenReturn(channelState);
|
when(() => channel.state).thenReturn(channelState);
|
||||||
when(() => channel.client).thenReturn(client);
|
when(() => channel.client).thenReturn(client);
|
||||||
@@ -207,10 +213,12 @@ void main() {
|
|||||||
final clientState = MockClientState();
|
final clientState = MockClientState();
|
||||||
final channel = MockChannel();
|
final channel = MockChannel();
|
||||||
final channelState = MockChannelState();
|
final channelState = MockChannelState();
|
||||||
|
final user = OwnUser(id: 'user-id');
|
||||||
final lastMessageAt = DateTime.parse('2020-06-22 12:00:00');
|
final lastMessageAt = DateTime.parse('2020-06-22 12:00:00');
|
||||||
|
|
||||||
when(() => client.state).thenReturn(clientState);
|
when(() => client.state).thenReturn(clientState);
|
||||||
when(() => clientState.user).thenReturn(OwnUser(id: 'user-id'));
|
when(() => clientState.user).thenReturn(user);
|
||||||
|
when(() => clientState.userStream).thenAnswer((_) => Stream.value(user));
|
||||||
when(() => channel.lastMessageAt).thenReturn(lastMessageAt);
|
when(() => channel.lastMessageAt).thenReturn(lastMessageAt);
|
||||||
when(() => channel.state).thenReturn(channelState);
|
when(() => channel.state).thenReturn(channelState);
|
||||||
when(() => channel.client).thenReturn(client);
|
when(() => channel.client).thenReturn(client);
|
||||||
@@ -281,10 +289,12 @@ void main() {
|
|||||||
final clientState = MockClientState();
|
final clientState = MockClientState();
|
||||||
final channel = MockChannel();
|
final channel = MockChannel();
|
||||||
final channelState = MockChannelState();
|
final channelState = MockChannelState();
|
||||||
|
final user = OwnUser(id: 'user-id');
|
||||||
final lastMessageAt = DateTime.parse('2020-06-22 12:00:00');
|
final lastMessageAt = DateTime.parse('2020-06-22 12:00:00');
|
||||||
|
|
||||||
when(() => client.state).thenReturn(clientState);
|
when(() => client.state).thenReturn(clientState);
|
||||||
when(() => clientState.user).thenReturn(OwnUser(id: 'user-id'));
|
when(() => clientState.user).thenReturn(user);
|
||||||
|
when(() => clientState.userStream).thenAnswer((_) => Stream.value(user));
|
||||||
when(() => channel.lastMessageAt).thenReturn(lastMessageAt);
|
when(() => channel.lastMessageAt).thenReturn(lastMessageAt);
|
||||||
when(() => channel.state).thenReturn(channelState);
|
when(() => channel.state).thenReturn(channelState);
|
||||||
when(() => channel.client).thenReturn(client);
|
when(() => channel.client).thenReturn(client);
|
||||||
@@ -346,10 +356,12 @@ void main() {
|
|||||||
final clientState = MockClientState();
|
final clientState = MockClientState();
|
||||||
final channel = MockChannel();
|
final channel = MockChannel();
|
||||||
final channelState = MockChannelState();
|
final channelState = MockChannelState();
|
||||||
|
final user = OwnUser(id: 'user-id');
|
||||||
final lastMessageAt = DateTime.parse('2020-06-22 12:00:00');
|
final lastMessageAt = DateTime.parse('2020-06-22 12:00:00');
|
||||||
|
|
||||||
when(() => client.state).thenReturn(clientState);
|
when(() => client.state).thenReturn(clientState);
|
||||||
when(() => clientState.user).thenReturn(OwnUser(id: 'user-id'));
|
when(() => clientState.user).thenReturn(user);
|
||||||
|
when(() => clientState.userStream).thenAnswer((_) => Stream.value(user));
|
||||||
when(() => channel.lastMessageAt).thenReturn(lastMessageAt);
|
when(() => channel.lastMessageAt).thenReturn(lastMessageAt);
|
||||||
when(() => channel.state).thenReturn(channelState);
|
when(() => channel.state).thenReturn(channelState);
|
||||||
when(() => channel.client).thenReturn(client);
|
when(() => channel.client).thenReturn(client);
|
||||||
|
|||||||
@@ -132,9 +132,10 @@ void main() {
|
|||||||
final clientState = MockClientState();
|
final clientState = MockClientState();
|
||||||
final channel = MockChannel();
|
final channel = MockChannel();
|
||||||
final channelState = MockChannelState();
|
final channelState = MockChannelState();
|
||||||
|
final currentUser = OwnUser(id: 'user-id');
|
||||||
|
|
||||||
when(() => client.state).thenReturn(clientState);
|
when(() => client.state).thenReturn(clientState);
|
||||||
when(() => clientState.user).thenReturn(OwnUser(id: 'user-id'));
|
when(() => clientState.user).thenReturn(currentUser);
|
||||||
when(() => channel.state).thenReturn(channelState);
|
when(() => channel.state).thenReturn(channelState);
|
||||||
when(() => channel.client).thenReturn(client);
|
when(() => channel.client).thenReturn(client);
|
||||||
when(() => channel.extraDataStream).thenAnswer((i) => Stream.value({
|
when(() => channel.extraDataStream).thenAnswer((i) => Stream.value({
|
||||||
@@ -143,36 +144,7 @@ void main() {
|
|||||||
when(() => channel.extraData).thenReturn({
|
when(() => channel.extraData).thenReturn({
|
||||||
'name': 'test',
|
'name': 'test',
|
||||||
});
|
});
|
||||||
when(() => channelState.membersStream).thenAnswer((i) => Stream.value([
|
final members = [
|
||||||
Member(
|
|
||||||
userId: 'user-id',
|
|
||||||
user: User(
|
|
||||||
id: 'user-id',
|
|
||||||
extraData: {
|
|
||||||
'image': 'testimage1',
|
|
||||||
},
|
|
||||||
),
|
|
||||||
),
|
|
||||||
Member(
|
|
||||||
userId: 'user-id2',
|
|
||||||
user: User(
|
|
||||||
id: 'user-id2',
|
|
||||||
extraData: {
|
|
||||||
'image': 'testimage2',
|
|
||||||
},
|
|
||||||
),
|
|
||||||
),
|
|
||||||
Member(
|
|
||||||
userId: 'user-id3',
|
|
||||||
user: User(
|
|
||||||
id: 'user-id3',
|
|
||||||
extraData: {
|
|
||||||
'image': 'testimage3',
|
|
||||||
},
|
|
||||||
),
|
|
||||||
),
|
|
||||||
]));
|
|
||||||
when(() => channelState.members).thenReturn([
|
|
||||||
Member(
|
Member(
|
||||||
userId: 'user-id',
|
userId: 'user-id',
|
||||||
user: User(
|
user: User(
|
||||||
@@ -200,7 +172,10 @@ void main() {
|
|||||||
},
|
},
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
]);
|
];
|
||||||
|
when(() => channelState.members).thenReturn(members);
|
||||||
|
when(() => channelState.membersStream)
|
||||||
|
.thenAnswer((_) => Stream.value(members));
|
||||||
|
|
||||||
await tester.pumpWidget(MaterialApp(
|
await tester.pumpWidget(MaterialApp(
|
||||||
home: StreamChat(
|
home: StreamChat(
|
||||||
@@ -215,10 +190,11 @@ void main() {
|
|||||||
));
|
));
|
||||||
|
|
||||||
final image = tester.widget<GroupImage>(find.byType(GroupImage));
|
final image = tester.widget<GroupImage>(find.byType(GroupImage));
|
||||||
expect(image.images, [
|
final otherMembers = members.where((it) => it.userId != currentUser.id);
|
||||||
'testimage2',
|
expect(
|
||||||
'testimage3',
|
image.members.map((it) => it.user?.id),
|
||||||
]);
|
otherMembers.map((it) => it.user?.id),
|
||||||
|
);
|
||||||
},
|
},
|
||||||
);
|
);
|
||||||
|
|
||||||
|
|||||||
@@ -13,11 +13,13 @@ void main() {
|
|||||||
final clientState = MockClientState();
|
final clientState = MockClientState();
|
||||||
final channel = MockChannel();
|
final channel = MockChannel();
|
||||||
final channelState = MockChannelState();
|
final channelState = MockChannelState();
|
||||||
|
final user = OwnUser(id: 'user-id');
|
||||||
final lastMessageAt = DateTime.parse('2020-06-22 12:00:00');
|
final lastMessageAt = DateTime.parse('2020-06-22 12:00:00');
|
||||||
|
|
||||||
when(() => channel.cid).thenReturn('cid');
|
when(() => channel.cid).thenReturn('cid');
|
||||||
when(() => client.state).thenReturn(clientState);
|
when(() => client.state).thenReturn(clientState);
|
||||||
when(() => clientState.user).thenReturn(OwnUser(id: 'user-id'));
|
when(() => clientState.user).thenReturn(user);
|
||||||
|
when(() => clientState.userStream).thenAnswer((_) => Stream.value(user));
|
||||||
when(() => channel.lastMessageAt).thenReturn(lastMessageAt);
|
when(() => channel.lastMessageAt).thenReturn(lastMessageAt);
|
||||||
when(() => channel.state).thenReturn(channelState);
|
when(() => channel.state).thenReturn(channelState);
|
||||||
when(() => channel.client).thenReturn(client);
|
when(() => channel.client).thenReturn(client);
|
||||||
|
|||||||
Reference in New Issue
Block a user