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