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.

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.