@@ -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,11 @@ 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 StreamConversation ( : streamId, : topic) = message.conversation ;
1057
1061
1058
1062
final messageListTheme = MessageListTheme .of (context);
1059
1063
1060
- final subscription = store.subscriptions[message. streamId];
1064
+ final subscription = store.subscriptions[streamId];
1061
1065
final Color backgroundColor;
1062
1066
final Color iconColor;
1063
1067
if (subscription != null ) {
@@ -1073,16 +1077,16 @@ class StreamMessageRecipientHeader extends StatelessWidget {
1073
1077
if (! _containsDifferentChannels (narrow)) {
1074
1078
streamWidget = const SizedBox (width: 16 );
1075
1079
} else {
1076
- final stream = store.streams[message. streamId];
1080
+ final stream = store.streams[streamId];
1077
1081
final streamName = stream? .name
1078
1082
?? message.conversation.displayRecipient
1079
1083
?? zulipLocalizations.unknownChannelName; // TODO(log)
1080
1084
1081
1085
streamWidget = GestureDetector (
1082
1086
onTap: () => Navigator .push (context,
1083
1087
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),
1086
1090
child: Row (
1087
1091
crossAxisAlignment: CrossAxisAlignment .center,
1088
1092
children: [
@@ -1130,7 +1134,7 @@ class StreamMessageRecipientHeader extends StatelessWidget {
1130
1134
Icon (size: 14 , color: designVariables.title.withFadedAlpha (0.5 ),
1131
1135
// A null [Icon.icon] makes a blank space.
1132
1136
iconDataForTopicVisibilityPolicy (
1133
- store.topicVisibilityPolicy (message. streamId, topic))),
1137
+ store.topicVisibilityPolicy (streamId, topic))),
1134
1138
]));
1135
1139
1136
1140
return GestureDetector (
@@ -1143,7 +1147,7 @@ class StreamMessageRecipientHeader extends StatelessWidget {
1143
1147
MessageListPage .buildRoute (context: context,
1144
1148
narrow: TopicNarrow .ofMessage (message))),
1145
1149
onLongPress: () => showTopicActionSheet (context,
1146
- channelId: message. streamId,
1150
+ channelId: streamId,
1147
1151
topic: topic,
1148
1152
someMessageIdInTopic: message.id),
1149
1153
child: ColoredBox (
@@ -1168,20 +1172,21 @@ class DmRecipientHeader extends StatelessWidget {
1168
1172
required this .narrow,
1169
1173
});
1170
1174
1171
- final DmMessage message;
1175
+ final MessageBase < DmConversation > message;
1172
1176
final Narrow narrow;
1173
1177
1174
1178
@override
1175
1179
Widget build (BuildContext context) {
1176
1180
final zulipLocalizations = ZulipLocalizations .of (context);
1177
1181
final store = PerAccountStoreWidget .of (context);
1178
1182
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 (", " ));
1185
1190
} else {
1186
1191
title = zulipLocalizations.messageListGroupYouWithYourself;
1187
1192
}
@@ -1233,7 +1238,7 @@ TextStyle recipientHeaderTextStyle(BuildContext context, {FontStyle? fontStyle})
1233
1238
class RecipientHeaderDate extends StatelessWidget {
1234
1239
const RecipientHeaderDate ({super .key, required this .message});
1235
1240
1236
- final Message message;
1241
+ final MessageBase message;
1237
1242
1238
1243
@override
1239
1244
Widget build (BuildContext context) {
0 commit comments