@@ -901,23 +901,28 @@ class _MarkAsReadAnimationState extends State<MarkAsReadAnimation> {
901
901
class RecipientHeader extends StatelessWidget {
902
902
const RecipientHeader ({super .key, required this .message, required this .narrow});
903
903
904
- final Message message;
904
+ final MessageBase message;
905
905
final Narrow narrow;
906
906
907
907
@override
908
908
Widget build (BuildContext context) {
909
909
final message = this .message;
910
- return switch (message) {
911
- StreamMessage () => StreamMessageRecipientHeader (message: message, narrow: narrow),
912
- DmMessage () => DmRecipientHeader (message: message, narrow: narrow),
913
- };
910
+ switch (message) {
911
+ case MessageBase <StreamRecipient >():
912
+ return StreamMessageRecipientHeader (message: message, narrow: narrow);
913
+ case MessageBase <DmRecipient >():
914
+ return DmRecipientHeader (message: message, narrow: narrow);
915
+ case MessageBase <Recipient >():
916
+ assert (false , 'Unexpected concrete subclass of MessageBase<MessageDestination>' );
917
+ return SizedBox .shrink ();
918
+ }
914
919
}
915
920
}
916
921
917
922
class DateSeparator extends StatelessWidget {
918
923
const DateSeparator ({super .key, required this .message});
919
924
920
- final Message message;
925
+ final MessageBase message;
921
926
922
927
@override
923
928
Widget build (BuildContext context) {
@@ -1027,7 +1032,7 @@ class StreamMessageRecipientHeader extends StatelessWidget {
1027
1032
required this .narrow,
1028
1033
});
1029
1034
1030
- final StreamMessage message;
1035
+ final MessageBase < StreamRecipient > message;
1031
1036
final Narrow narrow;
1032
1037
1033
1038
static bool _containsDifferentChannels (Narrow narrow) {
@@ -1053,11 +1058,11 @@ class StreamMessageRecipientHeader extends StatelessWidget {
1053
1058
final designVariables = DesignVariables .of (context);
1054
1059
final zulipLocalizations = ZulipLocalizations .of (context);
1055
1060
1056
- final topic = message.topic ;
1061
+ final StreamRecipient ( : streamId, : topic) = message.recipient ;
1057
1062
1058
1063
final messageListTheme = MessageListTheme .of (context);
1059
1064
1060
- final subscription = store.subscriptions[message. streamId];
1065
+ final subscription = store.subscriptions[streamId];
1061
1066
final Color backgroundColor;
1062
1067
final Color iconColor;
1063
1068
if (subscription != null ) {
@@ -1073,16 +1078,17 @@ class StreamMessageRecipientHeader extends StatelessWidget {
1073
1078
if (! _containsDifferentChannels (narrow)) {
1074
1079
streamWidget = const SizedBox (width: 16 );
1075
1080
} else {
1076
- final stream = store.streams[message.streamId];
1081
+ final stream = store.streams[streamId];
1082
+ final message = this .message;
1077
1083
final streamName = stream? .name
1078
- ?? message.displayRecipient
1084
+ ?? ( message is StreamMessage ? message .displayRecipient : null )
1079
1085
?? zulipLocalizations.unknownChannelName; // TODO(log)
1080
1086
1081
1087
streamWidget = GestureDetector (
1082
1088
onTap: () => Navigator .push (context,
1083
1089
MessageListPage .buildRoute (context: context,
1084
- narrow: ChannelNarrow (message. streamId))),
1085
- onLongPress: () => showChannelActionSheet (context, channelId: message. streamId),
1090
+ narrow: ChannelNarrow (streamId))),
1091
+ onLongPress: () => showChannelActionSheet (context, channelId: streamId),
1086
1092
child: Row (
1087
1093
crossAxisAlignment: CrossAxisAlignment .center,
1088
1094
children: [
@@ -1130,7 +1136,7 @@ class StreamMessageRecipientHeader extends StatelessWidget {
1130
1136
Icon (size: 14 , color: designVariables.title.withFadedAlpha (0.5 ),
1131
1137
// A null [Icon.icon] makes a blank space.
1132
1138
iconDataForTopicVisibilityPolicy (
1133
- store.topicVisibilityPolicy (message. streamId, topic))),
1139
+ store.topicVisibilityPolicy (streamId, topic))),
1134
1140
]));
1135
1141
1136
1142
return GestureDetector (
@@ -1143,7 +1149,7 @@ class StreamMessageRecipientHeader extends StatelessWidget {
1143
1149
MessageListPage .buildRoute (context: context,
1144
1150
narrow: TopicNarrow .ofMessage (message))),
1145
1151
onLongPress: () => showTopicActionSheet (context,
1146
- channelId: message. streamId,
1152
+ channelId: streamId,
1147
1153
topic: topic,
1148
1154
someMessageIdInTopic: message.id),
1149
1155
child: ColoredBox (
@@ -1168,20 +1174,21 @@ class DmRecipientHeader extends StatelessWidget {
1168
1174
required this .narrow,
1169
1175
});
1170
1176
1171
- final DmMessage message;
1177
+ final MessageBase < DmRecipient > message;
1172
1178
final Narrow narrow;
1173
1179
1174
1180
@override
1175
1181
Widget build (BuildContext context) {
1176
1182
final zulipLocalizations = ZulipLocalizations .of (context);
1177
1183
final store = PerAccountStoreWidget .of (context);
1178
1184
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 (", " ));
1185
+ if (message.recipient.allRecipientIds.length > 1 ) {
1186
+ title = zulipLocalizations.messageListGroupYouAndOthers (
1187
+ message.recipient.allRecipientIds
1188
+ .where ((id) => id != store.selfUserId)
1189
+ .map (store.userDisplayName)
1190
+ .sorted ()
1191
+ .join (", " ));
1185
1192
} else {
1186
1193
title = zulipLocalizations.messageListGroupYouWithYourself;
1187
1194
}
@@ -1233,7 +1240,7 @@ TextStyle recipientHeaderTextStyle(BuildContext context, {FontStyle? fontStyle})
1233
1240
class RecipientHeaderDate extends StatelessWidget {
1234
1241
const RecipientHeaderDate ({super .key, required this .message});
1235
1242
1236
- final Message message;
1243
+ final MessageBase message;
1237
1244
1238
1245
@override
1239
1246
Widget build (BuildContext context) {
0 commit comments