jetc.dev Newsletter Issue #262
Published: 2025-04-22
This week, we peek at paging and accessibility. We add tooltips and explore the order of effects. And we see what a large South American river — or possibly a firm named after the river — is offering to Compose Multiplatform developers.
Ooooo… What Did We Get?
Reviewing the release notes for the latest Jetpack Compose update!
Media3 got an update to 1.6.1
, including
androidx.media3:media3-ui-compose
. The overall Media3 1.6.1
release notes
do not indicate if anything changed in Media3 for Compose.
One Off the Stack, One Off the Slack
You’ve got questions. That’s understandable!
Can I Implement Data Paging in the UI Layer?
The answer is “perhaps, but that is not a good idea in general”. See how navigation can break composable-driven paging and how to switch to using Paging for Compose in this week’s highlighted Stack Overflow question.
How Can I Add Accessibility Announcements for Custom States?
Accessibility is important, but it is also a challenge as you build up
complex custom composables with custom states. One approach is to try
hard to map your custom states to existing accessibility actions, as we
see in this week’s highlighted Kotlinlang #compose
Slack thread.
Composable Commentary
Posts, videos, and other new information related to Jetpack Compose!
Medium: Design Tooltips in Jetpack Compose
Done right, tooltips and similar affordances can help both first-time users,
users encountering new features, and those needing help later on. Siva Ganesh Kantamani
explores how to create a tooltip()
modifier to add them to your Compose
UI project.
Medium: Understanding Execution Order in Jetpack Compose: DisposableEffect, LaunchedEffect, and Composables
Sahil Thakar’s post “does what it says on the tin”: it explains when different effects actually execute. More importantly, Sahil explains why, looking at the phases that composables go through and how those drive the timing of effects.
Exploring Jetpack Compose: DockedSearchBar
Joe Birch
(Mastodon)
continues a tour of Compose Material3, this time looking at
DockedSearchBar()
. Whereas SearchBar()
fills the content area when it has the focus,
DockedSearchBar()
does not, offering a different UX for the same basic
action of collecting a search query and displaying search results.
Bridging the Gap: Making Jetpack Compose Row Behave Like SwiftUi & Web
Joe Roskopf
(Bluesky)
points out that Row()
in Compose does not behave the same as
HStack
in SwiftUI or display: flex
in Web CSS. Joe then illustrates an
AdaptiveRow()
implementation to address the discrepancy.
Medium: BringIntoViewSpec — we’re getting serious!
Karol Ksionek continues an exploration of BringIntoViewSpec()
, following
up on an introductory post
from a month ago. This time, Karol looks at a few more concrete patterns
involving BringIntoViewSpec()
in TV apps, especially the ever-popular
“scrolling column of scrollable rows” seen in TV-centric content selectors.
Other Interesting Links
- Medium: Building a Clean & Reusable Dropdown Menu in Jetpack Compose
- Medium: Building QuickTasks, a Cross-Platform To-Do App with Compose Multiplatform, Kotlin Multiplatform Mobile, and SQLDelight
- Medium: Custom Sliding Dialog Using Modal Bottom Sheet in Jetpack Compose
- Medium: Handling Deep Links in Compose Multiplatform
- Medium: Handling Permissions in Jetpack Compose with Accompanist Permissions Library
- Medium: How Jetpack Compose Works Under the Hood: A Peek into Modern UI Magic
Resource Roundup
100% pure code!
Amazon App Platform
Amazon is a small bookseller that also dabbles in a bit of online service hosting. 😁 They have published a Kotlin Multplatform framework that blends dependency injection, Molecule-based presenters, a Compose Multiplatform-compatible UI layer, and more.
GitHub: adityanarvekar / excel-layout-jetpack-compose
Aditya Narvekar is building a two-dimensional scrollable table composable
(StickyMatrix()
).
As the composable name suggests, the top row and first column are sticky,
remaining fixed while the rest of the content scrolls. See
this Medium post
for more.
Notable Releases
Maps for Compose released 6.5.3
with a MarkerComposable
bug fix.
Circuit is up to 0.27.1
,
mostly to update dependencies.
Compose Unstyled is out with 1.21.0
,
adding a Slider()
and making some Modal()
fixes.
Vortex released 0.2.4
,
fixing an iOS swipe issue and updating dependencies.
Or, you can subscribe to the Atom feed or follow Mark Murphy in the Fediverse.
Recent Issues:
- 2025-04-15: Compose RC! Compose Multiplatform beta! Cameras and tabletops! Effect handlers! YouTube players! Other types of media players! And... are screenshot tests worth it?!?
- 2025-04-08: Wrapping! Wrapping! More wrapping! Optimizing composables! Optimizing Hot Reload! JSON Forms! LiveKit!
- 2025-04-01: Compose RC! Media3! animateBounds()! Custom modifiers using Modifier.Node! Rich text editing! And... is this UI useless?!?