@@ -282,34 +282,40 @@ mixin _MessageSequence {
282
282
_reprocessAll ();
283
283
}
284
284
285
- /// Append to [items] based on the index-th message and its content .
285
+ /// Prepare [items] before a [MessageListMessageItem] can be appended .
286
286
///
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)) {
287
+ /// Returns whether the sender can be shared between the items for both
288
+ /// messages, as in the negation of [MessageListMessageItem.showSender] .
289
+ bool _prepareTailForMessage (Message message, {required Message ? prevMessage}) {
290
+ if (prevMessage == null || ! haveSameRecipient (prevMessage, message)) {
297
291
items.add (MessageListRecipientHeaderItem (message));
298
- canShareSender = false ;
292
+ return false ;
299
293
} else {
300
294
assert (items.last is MessageListMessageItem );
301
295
final prevMessageItem = items.last as MessageListMessageItem ;
302
- assert (identical (prevMessageItem.message, messages[index - 1 ] ));
296
+ assert (identical (prevMessageItem.message, prevMessage ));
303
297
assert (prevMessageItem.isLastInBlock);
304
298
prevMessageItem.isLastInBlock = false ;
305
299
306
300
if (! messagesSameDay (prevMessageItem.message, message)) {
307
301
items.add (MessageListDateSeparatorItem (message));
308
- canShareSender = false ;
302
+ return false ;
309
303
} else {
310
- canShareSender = ( prevMessageItem.message.senderId == message.senderId) ;
304
+ return prevMessageItem.message.senderId == message.senderId;
311
305
}
312
306
}
307
+ }
308
+
309
+ /// Append to [items] based on the index-th message and its content.
310
+ ///
311
+ /// The previous messages in the list must already have been processed.
312
+ /// This message must already have been parsed and reflected in [contents] .
313
+ void _processMessage (int index) {
314
+ final prevMessage = index == 0 ? null : messages[index - 1 ];
315
+ final message = messages[index];
316
+ final content = contents[index];
317
+
318
+ final canShareSender = _prepareTailForMessage (message, prevMessage: prevMessage);
313
319
items.add (MessageListMessageItem (message, content,
314
320
showSender: ! canShareSender, isLastInBlock: true ));
315
321
}
0 commit comments