@@ -284,36 +284,45 @@ mixin _MessageSequence {
284
284
_reprocessAll ();
285
285
}
286
286
287
- /// Append to [items] based on the index-th message and its content.
287
+ /// Append to [items] an auxillary item like a date separator and update
288
+ /// properties of the previous message item, if necessary.
288
289
///
289
- /// The previous messages in the list must already have been processed.
290
- /// This message must already have been parsed and reflected in [contents] .
291
- void _processMessage (int index) {
292
- // This will get more complicated to handle the ways that messages interact
293
- // with the display of neighboring messages: sender headings #175
294
- // and date separators #173.
295
- final message = messages[index];
296
- final content = contents[index];
297
- bool canShareSender;
298
- if (index == 0 || ! haveSameRecipient (messages[index - 1 ], message)) {
290
+ /// Returns whether an item has been appended or not.
291
+ ///
292
+ /// The caller must append a [MessageListMessageItem] after this.
293
+ bool _maybeAppendAuxillaryItem (Message message, {required Message ? prevMessage}) {
294
+ if (prevMessage == null || ! haveSameRecipient (prevMessage, message)) {
299
295
items.add (MessageListRecipientHeaderItem (message));
300
- canShareSender = false ;
296
+ return true ;
301
297
} else {
302
298
assert (items.last is MessageListMessageItem );
303
299
final prevMessageItem = items.last as MessageListMessageItem ;
304
- assert (identical (prevMessageItem.message, messages[index - 1 ] ));
300
+ assert (identical (prevMessageItem.message, prevMessage ));
305
301
assert (prevMessageItem.isLastInBlock);
306
302
prevMessageItem.isLastInBlock = false ;
307
303
308
304
if (! messagesSameDay (prevMessageItem.message, message)) {
309
305
items.add (MessageListDateSeparatorItem (message));
310
- canShareSender = false ;
306
+ return true ;
311
307
} else {
312
- canShareSender = (prevMessageItem.message.senderId == message.senderId) ;
308
+ return false ;
313
309
}
314
310
}
311
+ }
312
+
313
+ /// Append to [items] based on the index-th message and its content.
314
+ ///
315
+ /// The previous messages in the list must already have been processed.
316
+ /// This message must already have been parsed and reflected in [contents] .
317
+ void _processMessage (int index) {
318
+ final prevMessage = index == 0 ? null : messages[index - 1 ];
319
+ final message = messages[index];
320
+ final content = contents[index];
321
+
322
+ final appended = _maybeAppendAuxillaryItem (message, prevMessage: prevMessage);
315
323
items.add (MessageListMessageItem (message, content,
316
- showSender: ! canShareSender, isLastInBlock: true ));
324
+ showSender: appended || prevMessage? .senderId != message.senderId,
325
+ isLastInBlock: true ));
317
326
}
318
327
319
328
/// Update [items] to include markers at start and end as appropriate.
0 commit comments