Skip to content

Commit 15b7af9

Browse files
committed
msglist: Remove 11px bottom padding in MessageItem at end of feed
See discussions: #1453 (comment) https://chat.zulip.org/#narrow/channel/48-mobile/topic/space.20at.20end.20of.20thread/near/2203417
1 parent cd7a9ea commit 15b7af9

File tree

3 files changed

+15
-6
lines changed

3 files changed

+15
-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
]);
@@ -443,6 +447,9 @@ mixin _MessageSequence {
443447
final prevMessageItem = items.last as MessageListMessageBaseItem;
444448
assert(identical(prevMessageItem.message, prevMessage));
445449
assert(prevMessageItem.isLastInBlock);
450+
assert(prevMessageItem.isLastInFeed);
451+
452+
prevMessageItem.isLastInFeed = false;
446453

447454
if (!haveSameRecipient(prevMessage, message)) {
448455
items.add(MessageListRecipientHeaderItem(message));
@@ -462,6 +469,7 @@ mixin _MessageSequence {
462469
assert(identical(item.message, message));
463470
assert(item.showSender == !canShareSender);
464471
assert(item.isLastInBlock);
472+
assert(item.isLastInFeed);
465473
if (shouldSetMiddleItem) {
466474
middleItem = items.length;
467475
}
@@ -482,7 +490,7 @@ mixin _MessageSequence {
482490
shouldSetMiddleItem: index == middleMessage,
483491
prevMessage: prevMessage,
484492
buildItem: (bool canShareSender) => MessageListMessageItem(
485-
message, content, showSender: !canShareSender, isLastInBlock: true));
493+
message, content, showSender: !canShareSender, isLastInBlock: true, isLastInFeed: true));
486494
}
487495

488496
/// Append to [items] based on the index-th message in [outboxMessages].
@@ -500,7 +508,7 @@ mixin _MessageSequence {
500508
shouldSetMiddleItem: index == 0 && middleMessage == messages.length,
501509
prevMessage: prevMessage,
502510
buildItem: (bool canShareSender) => MessageListOutboxMessageItem(
503-
message, showSender: !canShareSender, isLastInBlock: true));
511+
message, showSender: !canShareSender, isLastInBlock: true, isLastInFeed: true));
504512
}
505513

506514
/// Remove items associated with [outboxMessages] from [items].
@@ -519,6 +527,7 @@ mixin _MessageSequence {
519527
if (items.isNotEmpty) {
520528
final lastItem = items.last as MessageListMessageItem;
521529
lastItem.isLastInBlock = true;
530+
lastItem.isLastInFeed = true;
522531
}
523532
if (middleMessage == messages.length) middleItem = items.length;
524533
}

lib/widgets/message_list.dart

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1334,9 +1334,7 @@ class MessageItem extends StatelessWidget {
13341334
MessageListMessageItem() => MessageWithPossibleSender(item: item),
13351335
MessageListOutboxMessageItem() => OutboxMessageWithPossibleSender(item: item),
13361336
},
1337-
// TODO refine this padding; discussion:
1338-
// https://github.com/zulip/zulip-flutter/pull/1453#discussion_r2106526985
1339-
if (item.isLastInBlock) const SizedBox(height: 11),
1337+
if (item.isLastInBlock && !item.isLastInFeed) const SizedBox(height: 11),
13401338
]));
13411339
if (item case MessageListMessageItem(:final message)) {
13421340
child = _UnreadMarker(

test/model/message_list_test.dart

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3037,7 +3037,8 @@ void checkInvariants(MessageListView model) {
30373037
|| MessageListOutboxMessageItem()
30383038
|| MessageListDateSeparatorItem() => false,
30393039
MessageListRecipientHeaderItem() => true,
3040-
});
3040+
})
3041+
..isLastInFeed.equals(i == model.items.length);
30413042
}
30423043
check(model.items).length.equals(i);
30433044

@@ -3082,6 +3083,7 @@ extension MessageListMessageBaseItemChecks on Subject<MessageListMessageBaseItem
30823083
Subject<ZulipMessageContent> get content => has((x) => x.content, 'content');
30833084
Subject<bool> get showSender => has((x) => x.showSender, 'showSender');
30843085
Subject<bool> get isLastInBlock => has((x) => x.isLastInBlock, 'isLastInBlock');
3086+
Subject<bool> get isLastInFeed => has((x) => x.isLastInFeed, 'isLastInFeed');
30853087
}
30863088

30873089
extension MessageListMessageItemChecks on Subject<MessageListMessageItem> {

0 commit comments

Comments
 (0)