@@ -901,23 +901,27 @@ 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
910
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' ),
913
917
};
914
918
}
915
919
}
916
920
917
921
class DateSeparator extends StatelessWidget {
918
922
const DateSeparator ({super .key, required this .message});
919
923
920
- final Message message;
924
+ final MessageBase message;
921
925
922
926
@override
923
927
Widget build (BuildContext context) {
@@ -1027,7 +1031,7 @@ class StreamMessageRecipientHeader extends StatelessWidget {
1027
1031
required this .narrow,
1028
1032
});
1029
1033
1030
- final StreamMessage message;
1034
+ final MessageBase < StreamConversation > message;
1031
1035
final Narrow narrow;
1032
1036
1033
1037
static bool _containsDifferentChannels (Narrow narrow) {
@@ -1053,11 +1057,12 @@ class StreamMessageRecipientHeader extends StatelessWidget {
1053
1057
final designVariables = DesignVariables .of (context);
1054
1058
final zulipLocalizations = ZulipLocalizations .of (context);
1055
1059
1056
- final topic = message.topic;
1060
+ final streamId = message.conversation.streamId;
1061
+ final topic = message.conversation.topic;
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,16 @@ 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];
1077
1082
final streamName = stream? .name
1078
- ?? message.displayRecipient
1083
+ ?? message.conversation. displayRecipient
1079
1084
?? zulipLocalizations.unknownChannelName; // TODO(log)
1080
1085
1081
1086
streamWidget = GestureDetector (
1082
1087
onTap: () => Navigator .push (context,
1083
1088
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),
1086
1091
child: Row (
1087
1092
crossAxisAlignment: CrossAxisAlignment .center,
1088
1093
children: [
@@ -1130,7 +1135,7 @@ class StreamMessageRecipientHeader extends StatelessWidget {
1130
1135
Icon (size: 14 , color: designVariables.title.withFadedAlpha (0.5 ),
1131
1136
// A null [Icon.icon] makes a blank space.
1132
1137
iconDataForTopicVisibilityPolicy (
1133
- store.topicVisibilityPolicy (message. streamId, topic))),
1138
+ store.topicVisibilityPolicy (streamId, topic))),
1134
1139
]));
1135
1140
1136
1141
return GestureDetector (
@@ -1143,7 +1148,7 @@ class StreamMessageRecipientHeader extends StatelessWidget {
1143
1148
MessageListPage .buildRoute (context: context,
1144
1149
narrow: TopicNarrow .ofMessage (message))),
1145
1150
onLongPress: () => showTopicActionSheet (context,
1146
- channelId: message. streamId,
1151
+ channelId: streamId,
1147
1152
topic: topic,
1148
1153
someMessageIdInTopic: message.id),
1149
1154
child: ColoredBox (
@@ -1168,20 +1173,21 @@ class DmRecipientHeader extends StatelessWidget {
1168
1173
required this .narrow,
1169
1174
});
1170
1175
1171
- final DmMessage message;
1176
+ final MessageBase < DmConversation > message;
1172
1177
final Narrow narrow;
1173
1178
1174
1179
@override
1175
1180
Widget build (BuildContext context) {
1176
1181
final zulipLocalizations = ZulipLocalizations .of (context);
1177
1182
final store = PerAccountStoreWidget .of (context);
1178
1183
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 (", " ));
1185
1191
} else {
1186
1192
title = zulipLocalizations.messageListGroupYouWithYourself;
1187
1193
}
@@ -1233,7 +1239,7 @@ TextStyle recipientHeaderTextStyle(BuildContext context, {FontStyle? fontStyle})
1233
1239
class RecipientHeaderDate extends StatelessWidget {
1234
1240
const RecipientHeaderDate ({super .key, required this .message});
1235
1241
1236
- final Message message;
1242
+ final MessageBase message;
1237
1243
1238
1244
@override
1239
1245
Widget build (BuildContext context) {
0 commit comments