Skip to content

Commit ae80e4f

Browse files
committed
1 parent 1e49f63 commit ae80e4f

File tree

3 files changed

+18
-6
lines changed

3 files changed

+18
-6
lines changed

lib/model/message_list.dart

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -44,10 +44,12 @@ sealed class MessageListMessageBaseItem extends MessageListItem {
4444
ZulipMessageContent get content;
4545
bool showSender;
4646
bool isLastInBlock;
47+
bool isLastInFeed;
4748

4849
MessageListMessageBaseItem({
4950
required this.showSender,
5051
required this.isLastInBlock,
52+
required this.isLastInFeed,
5153
});
5254
}
5355

@@ -63,6 +65,7 @@ class MessageListMessageItem extends MessageListMessageBaseItem {
6365
this.content, {
6466
required super.showSender,
6567
required super.isLastInBlock,
68+
required super.isLastInFeed,
6669
});
6770
}
6871

@@ -77,6 +80,7 @@ class MessageListOutboxMessageItem extends MessageListMessageBaseItem {
7780
this.message, {
7881
required super.showSender,
7982
required super.isLastInBlock,
83+
required super.isLastInFeed,
8084
}) : content = ZulipContent(nodes: [
8185
ParagraphNode(links: null, nodes: [TextNode(message.contentMarkdown)]),
8286
]);
@@ -455,6 +459,9 @@ mixin _MessageSequence {
455459
final prevMessageItem = items.last as MessageListMessageBaseItem;
456460
assert(identical(prevMessageItem.message, prevMessage));
457461
assert(prevMessageItem.isLastInBlock);
462+
assert(prevMessageItem.isLastInFeed);
463+
464+
prevMessageItem.isLastInFeed = false;
458465

459466
if (oneMessagePerBlock || !haveSameRecipient(prevMessage, message)) {
460467
items.add(MessageListRecipientHeaderItem(message));
@@ -474,6 +481,7 @@ mixin _MessageSequence {
474481
assert(identical(item.message, message));
475482
assert(item.showSender == !canShareSender);
476483
assert(item.isLastInBlock);
484+
assert(item.isLastInFeed);
477485
if (shouldSetMiddleItem) {
478486
middleItem = items.length;
479487
}
@@ -494,7 +502,7 @@ mixin _MessageSequence {
494502
shouldSetMiddleItem: index == middleMessage,
495503
prevMessage: prevMessage,
496504
buildItem: (bool canShareSender) => MessageListMessageItem(
497-
message, content, showSender: !canShareSender, isLastInBlock: true));
505+
message, content, showSender: !canShareSender, isLastInBlock: true, isLastInFeed: true));
498506
}
499507

500508
/// Append to [items] based on the index-th message in [outboxMessages].
@@ -512,7 +520,7 @@ mixin _MessageSequence {
512520
shouldSetMiddleItem: index == 0 && middleMessage == messages.length,
513521
prevMessage: prevMessage,
514522
buildItem: (bool canShareSender) => MessageListOutboxMessageItem(
515-
message, showSender: !canShareSender, isLastInBlock: true));
523+
message, showSender: !canShareSender, isLastInBlock: true, isLastInFeed: true));
516524
}
517525

518526
/// Remove items associated with [outboxMessages] from [items].
@@ -531,6 +539,7 @@ mixin _MessageSequence {
531539
if (items.isNotEmpty) {
532540
final lastItem = items.last as MessageListMessageItem;
533541
lastItem.isLastInBlock = true;
542+
lastItem.isLastInFeed = true;
534543
}
535544
if (middleMessage == messages.length) middleItem = items.length;
536545
}

lib/widgets/message_list.dart

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1546,9 +1546,10 @@ class MessageItem extends StatelessWidget {
15461546
item: item),
15471547
MessageListOutboxMessageItem() => OutboxMessageWithPossibleSender(item: item),
15481548
},
1549-
// TODO refine this padding; discussion:
1550-
// https://github.com/zulip/zulip-flutter/pull/1453#discussion_r2106526985
1551-
if (item.isLastInBlock) const SizedBox(height: 11),
1549+
if (item.isLastInBlock && !item.isLastInFeed)
1550+
const SizedBox(height: 11)
1551+
else if (item.isLastInFeed)
1552+
const SizedBox(height: 5),
15521553
]));
15531554
if (item case MessageListMessageItem(:final message)) {
15541555
child = _UnreadMarker(

test/model/message_list_test.dart

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3095,7 +3095,8 @@ void checkInvariants(MessageListView model) {
30953095
|| MessageListOutboxMessageItem()
30963096
|| MessageListDateSeparatorItem() => false,
30973097
MessageListRecipientHeaderItem() => true,
3098-
});
3098+
})
3099+
..isLastInFeed.equals(i == model.items.length);
30993100
}
31003101
check(model.items).length.equals(i);
31013102

@@ -3140,6 +3141,7 @@ extension MessageListMessageBaseItemChecks on Subject<MessageListMessageBaseItem
31403141
Subject<ZulipMessageContent> get content => has((x) => x.content, 'content');
31413142
Subject<bool> get showSender => has((x) => x.showSender, 'showSender');
31423143
Subject<bool> get isLastInBlock => has((x) => x.isLastInBlock, 'isLastInBlock');
3144+
Subject<bool> get isLastInFeed => has((x) => x.isLastInFeed, 'isLastInFeed');
31433145
}
31443146

31453147
extension MessageListMessageItemChecks on Subject<MessageListMessageItem> {

0 commit comments

Comments
 (0)