@@ -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,12 @@ class StreamMessageRecipientHeader extends StatelessWidget {
10531057 final designVariables = DesignVariables .of (context);
10541058 final zulipLocalizations = ZulipLocalizations .of (context);
10551059
1056- final topic = message.topic;
1060+ final streamId = message.conversation.streamId;
1061+ final topic = message.conversation.topic;
10571062
10581063 final messageListTheme = MessageListTheme .of (context);
10591064
1060- final subscription = store.subscriptions[message. streamId];
1065+ final subscription = store.subscriptions[streamId];
10611066 final Color backgroundColor;
10621067 final Color iconColor;
10631068 if (subscription != null ) {
@@ -1073,16 +1078,16 @@ class StreamMessageRecipientHeader extends StatelessWidget {
10731078 if (! _containsDifferentChannels (narrow)) {
10741079 streamWidget = const SizedBox (width: 16 );
10751080 } else {
1076- final stream = store.streams[message. streamId];
1081+ final stream = store.streams[streamId];
10771082 final streamName = stream? .name
1078- ?? message.displayRecipient
1083+ ?? message.conversation. displayRecipient
10791084 ?? zulipLocalizations.unknownChannelName; // TODO(log)
10801085
10811086 streamWidget = GestureDetector (
10821087 onTap: () => Navigator .push (context,
10831088 MessageListPage .buildRoute (context: context,
1084- narrow: ChannelNarrow (message. streamId))),
1085- onLongPress: () => showChannelActionSheet (context, channelId: message. streamId),
1089+ narrow: ChannelNarrow (streamId))),
1090+ onLongPress: () => showChannelActionSheet (context, channelId: streamId),
10861091 child: Row (
10871092 crossAxisAlignment: CrossAxisAlignment .center,
10881093 children: [
@@ -1130,7 +1135,7 @@ class StreamMessageRecipientHeader extends StatelessWidget {
11301135 Icon (size: 14 , color: designVariables.title.withFadedAlpha (0.5 ),
11311136 // A null [Icon.icon] makes a blank space.
11321137 iconDataForTopicVisibilityPolicy (
1133- store.topicVisibilityPolicy (message. streamId, topic))),
1138+ store.topicVisibilityPolicy (streamId, topic))),
11341139 ]));
11351140
11361141 return GestureDetector (
@@ -1143,7 +1148,7 @@ class StreamMessageRecipientHeader extends StatelessWidget {
11431148 MessageListPage .buildRoute (context: context,
11441149 narrow: TopicNarrow .ofMessage (message))),
11451150 onLongPress: () => showTopicActionSheet (context,
1146- channelId: message. streamId,
1151+ channelId: streamId,
11471152 topic: topic,
11481153 someMessageIdInTopic: message.id),
11491154 child: ColoredBox (
@@ -1168,20 +1173,21 @@ class DmRecipientHeader extends StatelessWidget {
11681173 required this .narrow,
11691174 });
11701175
1171- final DmMessage message;
1176+ final MessageBase < DmConversation > message;
11721177 final Narrow narrow;
11731178
11741179 @override
11751180 Widget build (BuildContext context) {
11761181 final zulipLocalizations = ZulipLocalizations .of (context);
11771182 final store = PerAccountStoreWidget .of (context);
11781183 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 (", " ));
1184+ if (message.conversation.allRecipientIds.length > 1 ) {
1185+ title = zulipLocalizations.messageListGroupYouAndOthers (
1186+ message.conversation.allRecipientIds
1187+ .where ((id) => id != store.selfUserId)
1188+ .map (store.userDisplayName)
1189+ .sorted ()
1190+ .join (", " ));
11851191 } else {
11861192 title = zulipLocalizations.messageListGroupYouWithYourself;
11871193 }
@@ -1233,7 +1239,7 @@ TextStyle recipientHeaderTextStyle(BuildContext context, {FontStyle? fontStyle})
12331239class RecipientHeaderDate extends StatelessWidget {
12341240 const RecipientHeaderDate ({super .key, required this .message});
12351241
1236- final Message message;
1242+ final MessageBase message;
12371243
12381244 @override
12391245 Widget build (BuildContext context) {
0 commit comments