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