@@ -901,23 +901,27 @@ class _MarkAsReadAnimationState extends State<MarkAsReadAnimation> {
901901class RecipientHeader extends StatelessWidget {
902902 const RecipientHeader ({super .key, required this .message, required this .narrow});
903903
904- final Message message;
904+ final MessageBase message;
905905 final Narrow narrow;
906906
907907 @override
908908 Widget build (BuildContext context) {
909909 final message = this .message;
910910 return switch (message) {
911- StreamMessage () => StreamMessageRecipientHeader (message: message, narrow: narrow),
912- DmMessage () => DmRecipientHeader (message: message, narrow: narrow),
911+ MessageBase <StreamConversation >() =>
912+ StreamMessageRecipientHeader (message: message, narrow: narrow),
913+ MessageBase <DmConversation >() =>
914+ DmRecipientHeader (message: message, narrow: narrow),
915+ MessageBase <Conversation >() =>
916+ throw StateError ('Bad concrete subclass of MessageBase' ),
913917 };
914918 }
915919}
916920
917921class DateSeparator extends StatelessWidget {
918922 const DateSeparator ({super .key, required this .message});
919923
920- final Message message;
924+ final MessageBase message;
921925
922926 @override
923927 Widget build (BuildContext context) {
@@ -1027,7 +1031,7 @@ class StreamMessageRecipientHeader extends StatelessWidget {
10271031 required this .narrow,
10281032 });
10291033
1030- final StreamMessage message;
1034+ final MessageBase < StreamConversation > message;
10311035 final Narrow narrow;
10321036
10331037 static bool _containsDifferentChannels (Narrow narrow) {
@@ -1053,11 +1057,11 @@ class StreamMessageRecipientHeader extends StatelessWidget {
10531057 final designVariables = DesignVariables .of (context);
10541058 final zulipLocalizations = ZulipLocalizations .of (context);
10551059
1056- final topic = message.topic ;
1060+ final StreamConversation ( : streamId, : topic) = message.conversation ;
10571061
10581062 final messageListTheme = MessageListTheme .of (context);
10591063
1060- final subscription = store.subscriptions[message. streamId];
1064+ final subscription = store.subscriptions[streamId];
10611065 final Color backgroundColor;
10621066 final Color iconColor;
10631067 if (subscription != null ) {
@@ -1073,16 +1077,16 @@ class StreamMessageRecipientHeader extends StatelessWidget {
10731077 if (! _containsDifferentChannels (narrow)) {
10741078 streamWidget = const SizedBox (width: 16 );
10751079 } else {
1076- final stream = store.streams[message. streamId];
1080+ final stream = store.streams[streamId];
10771081 final streamName = stream? .name
10781082 ?? message.conversation.displayRecipient
10791083 ?? zulipLocalizations.unknownChannelName; // TODO(log)
10801084
10811085 streamWidget = GestureDetector (
10821086 onTap: () => Navigator .push (context,
10831087 MessageListPage .buildRoute (context: context,
1084- narrow: ChannelNarrow (message. streamId))),
1085- onLongPress: () => showChannelActionSheet (context, channelId: message. streamId),
1088+ narrow: ChannelNarrow (streamId))),
1089+ onLongPress: () => showChannelActionSheet (context, channelId: streamId),
10861090 child: Row (
10871091 crossAxisAlignment: CrossAxisAlignment .center,
10881092 children: [
@@ -1130,7 +1134,7 @@ class StreamMessageRecipientHeader extends StatelessWidget {
11301134 Icon (size: 14 , color: designVariables.title.withFadedAlpha (0.5 ),
11311135 // A null [Icon.icon] makes a blank space.
11321136 iconDataForTopicVisibilityPolicy (
1133- store.topicVisibilityPolicy (message. streamId, topic))),
1137+ store.topicVisibilityPolicy (streamId, topic))),
11341138 ]));
11351139
11361140 return GestureDetector (
@@ -1143,7 +1147,7 @@ class StreamMessageRecipientHeader extends StatelessWidget {
11431147 MessageListPage .buildRoute (context: context,
11441148 narrow: TopicNarrow .ofMessage (message))),
11451149 onLongPress: () => showTopicActionSheet (context,
1146- channelId: message. streamId,
1150+ channelId: streamId,
11471151 topic: topic,
11481152 someMessageIdInTopic: message.id),
11491153 child: ColoredBox (
@@ -1168,20 +1172,21 @@ class DmRecipientHeader extends StatelessWidget {
11681172 required this .narrow,
11691173 });
11701174
1171- final DmMessage message;
1175+ final MessageBase < DmConversation > message;
11721176 final Narrow narrow;
11731177
11741178 @override
11751179 Widget build (BuildContext context) {
11761180 final zulipLocalizations = ZulipLocalizations .of (context);
11771181 final store = PerAccountStoreWidget .of (context);
11781182 final String title;
1179- if (message.allRecipientIds.length > 1 ) {
1180- title = zulipLocalizations.messageListGroupYouAndOthers (message.allRecipientIds
1181- .where ((id) => id != store.selfUserId)
1182- .map (store.userDisplayName)
1183- .sorted ()
1184- .join (", " ));
1183+ if (message.conversation.allRecipientIds.length > 1 ) {
1184+ title = zulipLocalizations.messageListGroupYouAndOthers (
1185+ message.conversation.allRecipientIds
1186+ .where ((id) => id != store.selfUserId)
1187+ .map (store.userDisplayName)
1188+ .sorted ()
1189+ .join (", " ));
11851190 } else {
11861191 title = zulipLocalizations.messageListGroupYouWithYourself;
11871192 }
@@ -1233,7 +1238,7 @@ TextStyle recipientHeaderTextStyle(BuildContext context, {FontStyle? fontStyle})
12331238class RecipientHeaderDate extends StatelessWidget {
12341239 const RecipientHeaderDate ({super .key, required this .message});
12351240
1236- final Message message;
1241+ final MessageBase message;
12371242
12381243 @override
12391244 Widget build (BuildContext context) {
0 commit comments