feat: split collection stack into recomposable collection building blocks (3/7) - #3175
Open
DeveloperBlue wants to merge 31 commits into
Open
feat: split collection stack into recomposable collection building blocks (3/7)#3175DeveloperBlue wants to merge 31 commits into
DeveloperBlue wants to merge 31 commits into
Conversation
DeveloperBlue
force-pushed
the
developerblue/collections/stack
branch
from
August 8, 2026 11:31
46e17c4 to
4e0c583
Compare
…ecent, and gallery cards
…ttachments (swipe-to-reply, popover, reply preview)
…ollapsed galleries via coversPartId
…l for mixed attachments
…e title and card widgets.
…attachments from collection cards
DeveloperBlue
force-pushed
the
developerblue/collections/stack
branch
from
August 10, 2026 05:24
4e0c583 to
f240d27
Compare
DeveloperBlue
force-pushed
the
developerblue/collections/stack
branch
2 times, most recently
from
August 15, 2026 08:14
7a6e59a to
f240d27
Compare
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Breaks the monolithic
MessageImageGalleryfan into reusable collection widgets so later layouts (collage, grid, etc.) can share the same cards, title, and download chrome. Also renames gallery-specific flags to collection naming, and moves clip/shadow/gesture ownership onto those collection components.Built on top of #3166 (gallery fan refinements /
stack-base) and continues toward #3147 / #3122.MessageImageGallerywithcollections/-CollectionGroupStack,CollectionAttachmentCard,CollectionTitle,CollectionDownloadButtonfillis the sole collection flag onAttachmentHolder- parents own clip/shadow/cornersisMediaCollection,isInCollection, docs) so the shared collection API isn’t stack-specificCollectionAttachmentCardinstead of the whole stack wrapperChanges (commit-by-commit)
isMediaGallery→isMediaCollection,isInGallery→isInCollection, related docs/commentsCollectionGroupStack,CollectionAttachmentCard,CollectionTitle; delete monolith gallery widgetAttachmentHolderskips fill expand inPopupScopepartIndexForAttachment→partIdForAttachment- clarify id vs list-index namingattachment/+collections/CLAUDE ownership notesCollectionAttachmentCardowns chromefillsole presentation switch - droptransparentBackground/showCardShadowfromAttachmentHolderfill- holder + collections docsPer-file changes
collections/collection_group_stack.dartFan stack (ex-
MessageImageGallery): 3:4 cards, swipe/drag, title row, download wrap.collections/collection_attachment_card.dartCard chrome (shadow/clip), popup,
AttachmentHolder(fill: true), per-card reactions.collections/collection_title.dart“X Photos / Videos / Items” label above the stack.
collections/collection_download_button.dartCircular download control for incoming iOS collections.
attachment_holder.dartfillis the only collection presentation flag; popup-aware expand; reserved-box/compact placeholders kept for standalone downloads.message_popup.dart/message_popup_holder.dartCollection-card popup sizing/alignment; press ownership on cards.
message_part_content.dart/message_holder.dartRoute iOS collections through
CollectionGroupStack; reaction/index wiring updated for collection naming.reaction*.dartInside-tail bubble clipping/placement for collection cards.
message_part.dartCollection naming +
partIdForAttachment.Partially addresses #3122 and #2605 and lays groundwork for #2812