@@ -7,6 +7,7 @@ import 'package:flutter_color_models/flutter_color_models.dart';
7
7
import 'package:intl/intl.dart' hide TextDirection;
8
8
9
9
import '../api/model/model.dart' ;
10
+ import '../api/route/messages.dart' ;
10
11
import '../generated/l10n/zulip_localizations.dart' ;
11
12
import '../model/message_list.dart' ;
12
13
import '../model/narrow.dart' ;
@@ -901,23 +902,28 @@ class _MarkAsReadAnimationState extends State<MarkAsReadAnimation> {
901
902
class RecipientHeader extends StatelessWidget {
902
903
const RecipientHeader ({super .key, required this .message, required this .narrow});
903
904
904
- final Message message;
905
+ final MessageBase message;
905
906
final Narrow narrow;
906
907
907
908
@override
908
909
Widget build (BuildContext context) {
909
910
final message = this .message;
910
- return switch (message) {
911
- StreamMessage () => StreamMessageRecipientHeader (message: message, narrow: narrow),
912
- DmMessage () => DmRecipientHeader (message: message, narrow: narrow),
913
- };
911
+ switch (message) {
912
+ case MessageBase <StreamDestination >():
913
+ return StreamMessageRecipientHeader (message: message, narrow: narrow);
914
+ case MessageBase <DmDestination >():
915
+ return DmRecipientHeader (message: message, narrow: narrow);
916
+ case MessageBase <MessageDestination >():
917
+ assert (false , 'Unexpected concrete subclass of MessageBase<MessageDestination>' );
918
+ return SizedBox .shrink ();
919
+ }
914
920
}
915
921
}
916
922
917
923
class DateSeparator extends StatelessWidget {
918
924
const DateSeparator ({super .key, required this .message});
919
925
920
- final Message message;
926
+ final MessageBase message;
921
927
922
928
@override
923
929
Widget build (BuildContext context) {
@@ -1027,7 +1033,7 @@ class StreamMessageRecipientHeader extends StatelessWidget {
1027
1033
required this .narrow,
1028
1034
});
1029
1035
1030
- final StreamMessage message;
1036
+ final MessageBase < StreamDestination > message;
1031
1037
final Narrow narrow;
1032
1038
1033
1039
static bool _containsDifferentChannels (Narrow narrow) {
@@ -1053,11 +1059,11 @@ class StreamMessageRecipientHeader extends StatelessWidget {
1053
1059
final designVariables = DesignVariables .of (context);
1054
1060
final zulipLocalizations = ZulipLocalizations .of (context);
1055
1061
1056
- final topic = message.topic ;
1062
+ final StreamDestination ( : streamId, : topic) = message.destination ;
1057
1063
1058
1064
final messageListTheme = MessageListTheme .of (context);
1059
1065
1060
- final subscription = store.subscriptions[message. streamId];
1066
+ final subscription = store.subscriptions[streamId];
1061
1067
final Color backgroundColor;
1062
1068
final Color iconColor;
1063
1069
if (subscription != null ) {
@@ -1073,16 +1079,17 @@ class StreamMessageRecipientHeader extends StatelessWidget {
1073
1079
if (! _containsDifferentChannels (narrow)) {
1074
1080
streamWidget = const SizedBox (width: 16 );
1075
1081
} else {
1076
- final stream = store.streams[message.streamId];
1082
+ final stream = store.streams[streamId];
1083
+ final message = this .message;
1077
1084
final streamName = stream? .name
1078
- ?? message.displayRecipient
1085
+ ?? ( message is StreamMessage ? message .displayRecipient : null )
1079
1086
?? zulipLocalizations.unknownChannelName; // TODO(log)
1080
1087
1081
1088
streamWidget = GestureDetector (
1082
1089
onTap: () => Navigator .push (context,
1083
1090
MessageListPage .buildRoute (context: context,
1084
- narrow: ChannelNarrow (message. streamId))),
1085
- onLongPress: () => showChannelActionSheet (context, channelId: message. streamId),
1091
+ narrow: ChannelNarrow (streamId))),
1092
+ onLongPress: () => showChannelActionSheet (context, channelId: streamId),
1086
1093
child: Row (
1087
1094
crossAxisAlignment: CrossAxisAlignment .center,
1088
1095
children: [
@@ -1130,7 +1137,7 @@ class StreamMessageRecipientHeader extends StatelessWidget {
1130
1137
Icon (size: 14 , color: designVariables.title.withFadedAlpha (0.5 ),
1131
1138
// A null [Icon.icon] makes a blank space.
1132
1139
iconDataForTopicVisibilityPolicy (
1133
- store.topicVisibilityPolicy (message. streamId, topic))),
1140
+ store.topicVisibilityPolicy (streamId, topic))),
1134
1141
]));
1135
1142
1136
1143
return GestureDetector (
@@ -1141,9 +1148,9 @@ class StreamMessageRecipientHeader extends StatelessWidget {
1141
1148
onTap: narrow is TopicNarrow ? null
1142
1149
: () => Navigator .push (context,
1143
1150
MessageListPage .buildRoute (context: context,
1144
- narrow: TopicNarrow . ofMessage (message ))),
1151
+ narrow: TopicNarrow (streamId, topic ))),
1145
1152
onLongPress: () => showTopicActionSheet (context,
1146
- channelId: message. streamId,
1153
+ channelId: streamId,
1147
1154
topic: topic,
1148
1155
someMessageIdInTopic: message.id),
1149
1156
child: ColoredBox (
@@ -1168,7 +1175,7 @@ class DmRecipientHeader extends StatelessWidget {
1168
1175
required this .narrow,
1169
1176
});
1170
1177
1171
- final DmMessage message;
1178
+ final MessageBase < DmDestination > message;
1172
1179
final Narrow narrow;
1173
1180
1174
1181
@override
@@ -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