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