refactor(ui): Replace channel.extraDataStream with channel.nameStream, channel.imageStream in ChannelName and ChannelAvatar widget respectively.

Signed-off-by: xsahil03x <[email protected]>
This commit is contained in:
Sahil Kumar
2021-08-11 16:34:24 +05:30
committed by xsahil03x
parent 702f7ee937
commit e15575f0ae
7 changed files with 79 additions and 104 deletions
@@ -90,12 +90,11 @@ class ChannelAvatar extends StatelessWidget {
final colorTheme = chatThemeData.colorTheme; final colorTheme = chatThemeData.colorTheme;
final previewTheme = chatThemeData.channelPreviewTheme.avatarTheme; final previewTheme = chatThemeData.channelPreviewTheme.avatarTheme;
return BetterStreamBuilder<Map<String, dynamic>>( return StreamBuilder<String?>(
stream: channel.extraDataStream, stream: channel.imageStream,
initialData: channel.extraData, initialData: channel.image,
builder: (context, extraData) { builder: (context, snapshot) {
final channelImage = extraData['image']; final channelImage = snapshot.data;
if (channelImage != null) { if (channelImage != null) {
Widget child = ClipRRect( Widget child = ClipRRect(
borderRadius: borderRadius ?? previewTheme?.borderRadius, borderRadius: borderRadius ?? previewTheme?.borderRadius,
@@ -108,7 +107,7 @@ class ChannelAvatar extends StatelessWidget {
imageUrl: channelImage, imageUrl: channelImage,
errorWidget: (_, __, ___) => Center( errorWidget: (_, __, ___) => Center(
child: Text( child: Text(
extraData['name']?[0] ?? '', channel.name?[0] ?? '',
style: TextStyle( style: TextStyle(
color: colorTheme.barsBg, color: colorTheme.barsBg,
fontWeight: FontWeight.bold, fontWeight: FontWeight.bold,
@@ -27,40 +27,40 @@ class ChannelName extends StatelessWidget {
final client = StreamChat.of(context); final client = StreamChat.of(context);
final channel = StreamChannel.of(context).channel; final channel = StreamChannel.of(context).channel;
return BetterStreamBuilder<Map<String, Object?>>( assert(channel.state != null, 'Channel ${channel.id} is not initialized');
stream: channel.extraDataStream,
initialData: channel.extraData, return StreamBuilder<String?>(
builder: (context, data) => _buildName( stream: channel.nameStream,
data, initialData: channel.name,
channel.state?.members, builder: (context, snapshot) => _buildName(
snapshot.data,
channel.state!.members,
client, client,
), ),
); );
} }
Widget _buildName( Widget _buildName(
Map<String, dynamic> extraData, String? name,
List<Member>? members, List<Member> members,
StreamChatState client, StreamChatState client,
) => ) =>
LayoutBuilder( LayoutBuilder(
builder: (context, constraints) { builder: (context, constraints) {
var title = context.translations.noTitleText; var title = name;
if (extraData['name'] != null) { if (title == null && members.isNotEmpty) {
title = extraData['name'];
} else {
final otherMembers = members final otherMembers = members
?.where((member) => member.userId != client.currentUser!.id); .where((member) => member.userId != client.currentUser!.id);
if (otherMembers?.length == 1) { if (otherMembers.length == 1) {
if (otherMembers!.first.user != null) { if (otherMembers.first.user != null) {
title = otherMembers.first.user!.name; title = otherMembers.first.user!.name;
} }
} else if (otherMembers?.isNotEmpty == true) { } else if (otherMembers.isNotEmpty == true) {
final maxWidth = constraints.maxWidth; final maxWidth = constraints.maxWidth;
final maxChars = maxWidth / (textStyle?.fontSize ?? 1); final maxChars = maxWidth / (textStyle?.fontSize ?? 1);
var currentChars = 0; var currentChars = 0;
final currentMembers = <Member>[]; final currentMembers = <Member>[];
otherMembers!.forEach((element) { otherMembers.forEach((element) {
final newLength = final newLength =
currentChars + (element.user?.name.length ?? 0); currentChars + (element.user?.name.length ?? 0);
if (newLength < maxChars) { if (newLength < maxChars) {
@@ -77,7 +77,7 @@ class ChannelName extends StatelessWidget {
} }
return Text( return Text(
title, title ?? context.translations.noTitleText,
style: textStyle, style: textStyle,
overflow: textOverflow, overflow: textOverflow,
); );
@@ -26,12 +26,11 @@ void main() {
when(() => channel.client).thenReturn(client); when(() => channel.client).thenReturn(client);
when(() => channel.isMuted).thenReturn(false); when(() => channel.isMuted).thenReturn(false);
when(() => channel.isMutedStream).thenAnswer((i) => Stream.value(false)); when(() => channel.isMutedStream).thenAnswer((i) => Stream.value(false));
when(() => channel.extraDataStream).thenAnswer((i) => Stream.value({ when(() => channel.nameStream).thenAnswer((_) => Stream.value('test'));
'name': 'test', when(() => channel.name).thenReturn('test');
})); when(() => channel.imageStream)
when(() => channel.extraData).thenReturn({ .thenAnswer((i) => Stream.value('https://bit.ly/321RmWb'));
'name': 'test', when(() => channel.image).thenReturn('https://bit.ly/321RmWb');
});
when(() => channelState.unreadCount).thenReturn(1); when(() => channelState.unreadCount).thenReturn(1);
when(() => client.wsConnectionStatusStream) when(() => client.wsConnectionStatusStream)
.thenAnswer((_) => Stream.value(ConnectionStatus.connected)); .thenAnswer((_) => Stream.value(ConnectionStatus.connected));
@@ -91,12 +90,11 @@ void main() {
when(() => channel.client).thenReturn(client); when(() => channel.client).thenReturn(client);
when(() => channel.isMuted).thenReturn(false); when(() => channel.isMuted).thenReturn(false);
when(() => channel.isMutedStream).thenAnswer((i) => Stream.value(false)); when(() => channel.isMutedStream).thenAnswer((i) => Stream.value(false));
when(() => channel.extraDataStream).thenAnswer((i) => Stream.value({ when(() => channel.nameStream).thenAnswer((_) => Stream.value('test'));
'name': 'test', when(() => channel.name).thenReturn('test');
})); when(() => channel.imageStream)
when(() => channel.extraData).thenReturn({ .thenAnswer((i) => Stream.value('https://bit.ly/321RmWb'));
'name': 'test', when(() => channel.image).thenReturn('https://bit.ly/321RmWb');
});
when(() => channelState.unreadCount).thenReturn(1); when(() => channelState.unreadCount).thenReturn(1);
when(() => channelState.unreadCountStream) when(() => channelState.unreadCountStream)
.thenAnswer((i) => Stream.value(1)); .thenAnswer((i) => Stream.value(1));
@@ -159,12 +157,11 @@ void main() {
when(() => channel.client).thenReturn(client); when(() => channel.client).thenReturn(client);
when(() => channel.isMuted).thenReturn(false); when(() => channel.isMuted).thenReturn(false);
when(() => channel.isMutedStream).thenAnswer((i) => Stream.value(false)); when(() => channel.isMutedStream).thenAnswer((i) => Stream.value(false));
when(() => channel.extraDataStream).thenAnswer((i) => Stream.value({ when(() => channel.nameStream).thenAnswer((_) => Stream.value('test'));
'name': 'test', when(() => channel.name).thenReturn('test');
})); when(() => channel.imageStream)
when(() => channel.extraData).thenReturn({ .thenAnswer((i) => Stream.value('https://bit.ly/321RmWb'));
'name': 'test', when(() => channel.image).thenReturn('https://bit.ly/321RmWb');
});
when(() => channelState.unreadCount).thenReturn(1); when(() => channelState.unreadCount).thenReturn(1);
when(() => channelState.unreadCountStream) when(() => channelState.unreadCountStream)
.thenAnswer((i) => Stream.value(1)); .thenAnswer((i) => Stream.value(1));
@@ -305,12 +302,11 @@ void main() {
when(() => channel.client).thenReturn(client); when(() => channel.client).thenReturn(client);
when(() => channel.isMuted).thenReturn(false); when(() => channel.isMuted).thenReturn(false);
when(() => channel.isMutedStream).thenAnswer((i) => Stream.value(false)); when(() => channel.isMutedStream).thenAnswer((i) => Stream.value(false));
when(() => channel.extraDataStream).thenAnswer((i) => Stream.value({ when(() => channel.nameStream).thenAnswer((_) => Stream.value('test'));
'name': 'test', when(() => channel.name).thenReturn('test');
})); when(() => channel.imageStream)
when(() => channel.extraData).thenReturn({ .thenAnswer((i) => Stream.value('https://bit.ly/321RmWb'));
'name': 'test', when(() => channel.image).thenReturn('https://bit.ly/321RmWb');
});
when(() => channelState.unreadCount).thenReturn(1); when(() => channelState.unreadCount).thenReturn(1);
when(() => channelState.unreadCountStream) when(() => channelState.unreadCountStream)
.thenAnswer((i) => Stream.value(1)); .thenAnswer((i) => Stream.value(1));
@@ -373,12 +369,11 @@ void main() {
when(() => channel.client).thenReturn(client); when(() => channel.client).thenReturn(client);
when(() => channel.isMuted).thenReturn(false); when(() => channel.isMuted).thenReturn(false);
when(() => channel.isMutedStream).thenAnswer((i) => Stream.value(false)); when(() => channel.isMutedStream).thenAnswer((i) => Stream.value(false));
when(() => channel.extraDataStream).thenAnswer((i) => Stream.value({ when(() => channel.nameStream).thenAnswer((_) => Stream.value('test'));
'name': 'test', when(() => channel.name).thenReturn('test');
})); when(() => channel.imageStream)
when(() => channel.extraData).thenReturn({ .thenAnswer((i) => Stream.value('https://bit.ly/321RmWb'));
'name': 'test', when(() => channel.image).thenReturn('https://bit.ly/321RmWb');
});
when(() => channelState.unreadCount).thenReturn(1); when(() => channelState.unreadCount).thenReturn(1);
when(() => channelState.unreadCountStream) when(() => channelState.unreadCountStream)
.thenAnswer((i) => Stream.value(1)); .thenAnswer((i) => Stream.value(1));
@@ -20,14 +20,11 @@ void main() {
when(() => clientState.currentUser).thenReturn(OwnUser(id: 'user-id')); when(() => clientState.currentUser).thenReturn(OwnUser(id: 'user-id'));
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.nameStream).thenAnswer((_) => Stream.value('test'));
'name': 'test', when(() => channel.name).thenReturn('test');
'image': 'imagetest', when(() => channel.imageStream)
})); .thenAnswer((i) => Stream.value('https://bit.ly/321RmWb'));
when(() => channel.extraData).thenReturn({ when(() => channel.image).thenReturn('https://bit.ly/321RmWb');
'name': 'test',
'image': 'imagetest',
});
await tester.pumpWidget(MaterialApp( await tester.pumpWidget(MaterialApp(
home: StreamChat( home: StreamChat(
@@ -43,7 +40,7 @@ void main() {
final image = final image =
tester.widget<CachedNetworkImage>(find.byType(CachedNetworkImage)); tester.widget<CachedNetworkImage>(find.byType(CachedNetworkImage));
expect(image.imageUrl, 'imagetest'); expect(image.imageUrl, 'https://bit.ly/321RmWb');
}, },
); );
@@ -59,12 +56,10 @@ void main() {
when(() => clientState.currentUser).thenReturn(OwnUser(id: 'user-id')); when(() => clientState.currentUser).thenReturn(OwnUser(id: 'user-id'));
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.nameStream).thenAnswer((_) => Stream.value('test'));
'name': 'test', when(() => channel.name).thenReturn('test');
})); when(() => channel.imageStream).thenAnswer((i) => Stream.value(null));
when(() => channel.extraData).thenReturn({ when(() => channel.image).thenReturn(null);
'name': 'test',
});
when(() => channelState.membersStream).thenAnswer((i) => Stream.value([ when(() => channelState.membersStream).thenAnswer((i) => Stream.value([
Member( Member(
userId: 'user-id', userId: 'user-id',
@@ -132,12 +127,9 @@ void main() {
when(() => clientState.currentUser).thenReturn(currentUser); when(() => clientState.currentUser).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.nameStream).thenAnswer((_) => Stream.value('test'));
'name': 'test', when(() => channel.name).thenReturn('test');
})); when(() => channel.imageStream).thenAnswer((i) => Stream.value(null));
when(() => channel.extraData).thenReturn({
'name': 'test',
});
final members = [ final members = [
Member( Member(
userId: 'user-id', userId: 'user-id',
@@ -198,14 +190,11 @@ void main() {
when(() => clientState.currentUser).thenReturn(OwnUser(id: 'user-id')); when(() => clientState.currentUser).thenReturn(OwnUser(id: 'user-id'));
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.nameStream).thenAnswer((_) => Stream.value('test'));
'name': 'test', when(() => channel.name).thenReturn('test');
'image': 'imagetest', when(() => channel.imageStream)
})); .thenAnswer((i) => Stream.value('https://bit.ly/321RmWb'));
when(() => channel.extraData).thenReturn({ when(() => channel.image).thenReturn('https://bit.ly/321RmWb');
'name': 'test',
'image': 'imagetest',
});
await tester.pumpWidget(MaterialApp( await tester.pumpWidget(MaterialApp(
home: StreamChat( home: StreamChat(
@@ -21,17 +21,13 @@ void main() {
when(() => channel.state).thenReturn(channelState); when(() => channel.state).thenReturn(channelState);
when(() => channel.client).thenReturn(client); when(() => channel.client).thenReturn(client);
when(() => channel.isMuted).thenReturn(false); when(() => channel.isMuted).thenReturn(false);
when(() => channel.isMutedStream).thenAnswer((i) => Stream.value(false)); when(() => channel.isMutedStream).thenAnswer((_) => Stream.value(false));
when(() => channel.extraDataStream).thenAnswer((i) => Stream.value({ when(() => channel.nameStream).thenAnswer((_) => Stream.value('test'));
'name': 'test', when(() => channel.name).thenReturn('test');
}));
when(() => channel.extraData).thenReturn({
'name': 'test',
});
when(() => channelState.unreadCount).thenReturn(1); when(() => channelState.unreadCount).thenReturn(1);
when(() => channelState.unreadCountStream) when(() => channelState.unreadCountStream)
.thenAnswer((i) => Stream.value(1)); .thenAnswer((i) => Stream.value(1));
when(() => channelState.membersStream).thenAnswer((i) => Stream.value([ when(() => channelState.membersStream).thenAnswer((_) => Stream.value([
Member( Member(
userId: 'user-id', userId: 'user-id',
user: User(id: 'user-id'), user: User(id: 'user-id'),
@@ -26,12 +26,12 @@ void main() {
when(() => channel.client).thenReturn(client); when(() => channel.client).thenReturn(client);
when(() => channel.isMuted).thenReturn(false); when(() => channel.isMuted).thenReturn(false);
when(() => channel.isMutedStream).thenAnswer((i) => Stream.value(false)); when(() => channel.isMutedStream).thenAnswer((i) => Stream.value(false));
when(() => channel.extraDataStream).thenAnswer((i) => Stream.value({ when(() => channel.nameStream)
'name': 'test name', .thenAnswer((i) => Stream.value('test name'));
})); when(() => channel.name).thenReturn('test name');
when(() => channel.extraData).thenReturn({ when(() => channel.imageStream)
'name': 'test name', .thenAnswer((i) => Stream.value('https://bit.ly/321RmWb'));
}); when(() => channel.image).thenReturn('https://bit.ly/321RmWb');
when(() => clientState.channels).thenReturn({ when(() => clientState.channels).thenReturn({
channel.cid!: channel, channel.cid!: channel,
}); });
@@ -22,12 +22,8 @@ void main() {
when(() => channel.client).thenReturn(client); when(() => channel.client).thenReturn(client);
when(() => channel.isMuted).thenReturn(false); when(() => channel.isMuted).thenReturn(false);
when(() => channel.isMutedStream).thenAnswer((i) => Stream.value(false)); when(() => channel.isMutedStream).thenAnswer((i) => Stream.value(false));
when(() => channel.extraDataStream).thenAnswer((i) => Stream.value({ when(() => channel.name).thenReturn('test');
'name': 'test', when(() => channel.nameStream).thenAnswer((i) => Stream.value('test'));
}));
when(() => channel.extraData).thenReturn({
'name': 'test',
});
when(() => channelState.unreadCount).thenReturn(1); when(() => channelState.unreadCount).thenReturn(1);
when(() => channelState.unreadCountStream) when(() => channelState.unreadCountStream)
.thenAnswer((i) => Stream.value(1)); .thenAnswer((i) => Stream.value(1));