@@ -35,18 +35,31 @@ class MessageListDateSeparatorItem extends MessageListItem {
3535 MessageListDateSeparatorItem (this .message);
3636}
3737
38- /// A message to show in the message list.
39- class MessageListMessageItem extends MessageListItem {
40- final Message message;
41- ZulipMessageContent content;
38+ /// A [MessageBase] to show in the message list.
39+ sealed class MessageListMessageBaseItem extends MessageListItem {
40+ MessageBase get message;
41+ ZulipMessageContent get content;
4242 bool showSender;
4343 bool isLastInBlock;
4444
45+ MessageListMessageBaseItem ({
46+ required this .showSender,
47+ required this .isLastInBlock,
48+ });
49+ }
50+
51+ /// A [Message] to show in the message list.
52+ class MessageListMessageItem extends MessageListMessageBaseItem {
53+ @override
54+ final Message message;
55+ @override
56+ ZulipMessageContent content;
57+
4558 MessageListMessageItem (
4659 this .message,
4760 this .content, {
48- required this .showSender,
49- required this .isLastInBlock,
61+ required super .showSender,
62+ required super .isLastInBlock,
5063 });
5164}
5265
@@ -350,12 +363,12 @@ mixin _MessageSequence {
350363}
351364
352365@visibleForTesting
353- bool haveSameRecipient (Message prevMessage, Message message) {
366+ bool haveSameRecipient (MessageBase prevMessage, MessageBase message) {
354367 return prevMessage.conversation.isSameAs (message.conversation);
355368}
356369
357370@visibleForTesting
358- bool messagesSameDay (Message prevMessage, Message message) {
371+ bool messagesSameDay (MessageBase prevMessage, MessageBase message) {
359372 // TODO memoize [DateTime]s... also use memoized for showing date/time in msglist
360373 final prevTime = DateTime .fromMillisecondsSinceEpoch (prevMessage.timestamp * 1000 );
361374 final time = DateTime .fromMillisecondsSinceEpoch (message.timestamp * 1000 );
@@ -410,19 +423,20 @@ class MessageListView with ChangeNotifier, _MessageSequence {
410423 /// one way or another.
411424 ///
412425 /// See also [_allMessagesVisible] .
413- bool _messageVisible (Message message) {
426+ bool _messageVisible (MessageBase message) {
414427 switch (narrow) {
415428 case CombinedFeedNarrow ():
416- return switch (message) {
417- StreamMessage ( ) =>
418- store.isTopicVisible (message. streamId, message. topic),
419- DmMessage () => true ,
429+ return switch (message.conversation ) {
430+ StreamConversation ( : final streamId, : final topic ) =>
431+ store.isTopicVisible (streamId, topic),
432+ DmConversation () => true ,
420433 };
421434
422435 case ChannelNarrow (: final streamId):
423- assert (message is StreamMessage && message.streamId == streamId);
424- if (message is ! StreamMessage ) return false ;
425- return store.isTopicVisibleInStream (streamId, message.topic);
436+ assert (message is MessageBase <StreamConversation >
437+ && message.conversation.streamId == streamId);
438+ if (message is ! MessageBase <StreamConversation >) return false ;
439+ return store.isTopicVisibleInStream (streamId, message.conversation.topic);
426440
427441 case TopicNarrow ():
428442 case DmNarrow ():
0 commit comments