jetc.dev Newsletter Issue #257
Published: 2025-03-18
We got our first RC for the 1.8.0
Compose release!
Beyond that, we look at states, bumps, dialogs, and dropdowns. Plus, we call out some tabs for being lazy.
Ooooo… What Did We Get?
Reviewing the release notes for the latest Jetpack Compose update!
The Compose BOM family were updated to 2025.03.00
. However, the production BOM
did not change targets — you get 1.7.8
, as you did with 2025.02.00
.
However, the core Compose artifacts are up to 1.8.0-rc01
, as we continue heading
towards a 1.8.0
stable release (in time for Google I|O?). If you are using
SnapshotObserver
, some APIs were renamed.
Otherwise, this release just has a few bug fixes.
Compose Material3 is up to 1.4.0-alpha10
, with a bunch of API changes.
Of note, TabRow()
and ScrollableTabRow()
are being deprecated, in favor of
Primary...()
and Secondary...()
flavors of each of those.
Wear Compose is up to 1.5.0-alpha11
, with several changes.
PagerState
is now decoupled from Foundation’s PagerState
, CurvedModifier
now
offers semantics, rotary overscroll is offered, and more!
We also got a bunch of related updates, including:
androidx.activity:activity-compose:1.11.0-alpha01
androidx.lifecycle:lifecycle-runtime-compose:2.9.0-alpha12
androidx.lifecycle:lifecycle-runtime-compose-android:2.9.0-alpha12
androidx.lifecycle:lifecycle-runtime-compose-jvmstubs:2.9.0-alpha12
androidx.lifecycle:lifecycle-runtime-compose-linuxx64stubs:2.9.0-alpha12
androidx.lifecycle:lifecycle-viewmodel-compose:2.9.0-alpha12
androidx.lifecycle:lifecycle-viewmodel-compose-android:2.9.0-alpha12
androidx.lifecycle:lifecycle-viewmodel-compose-desktop:2.9.0-alpha12
androidx.media3:media3-ui-compose:1.6.0-rc01
androidx.navigation:navigation-compose:2.8.9
androidx.navigation:navigation-compose:2.9.0-alpha08
androidx.navigation:navigation-compose-android:2.9.0-alpha08
androidx.navigation:navigation-compose-jvmstubs:2.9.0-alpha08
androidx.navigation:navigation-compose-linuxx64stubs:2.9.0-alpha08
androidx.navigation:navigation-fragment-compose:2.8.9
androidx.navigation:navigation-fragment-compose:2.9.0-alpha08
androidx.savedstate:savedstate-compose:1.3.0-alpha10
androidx.savedstate:savedstate-compose-android:1.3.0-alpha10
androidx.savedstate:savedstate-compose-jvmstubs:1.3.0-alpha10
androidx.savedstate:savedstate-compose-linuxx64stubs:1.3.0-alpha10
One Off the Stack, One Off the Slack
You’ve got questions. That’s understandable!
Why Do I Need to Provide an Initial State?
Spoiler alert: A State
needs a state. If you are trying to adapt a flow to a
State
using collectAsStateWithLifecycle()
, it matters whether your flow is a
Flow
or a StateFlow
, in terms of the initial state for your desired State
.
Learn more in this week’s highlighted Stack Overflow question.
Can I Have a Horizontally-Scrolling FlowRow()
?
FlowRow()
is designed to wrap as a collection of composables exceeds the available
width. But, what if a single composable out of that collection exceeds the
available width — could we have the row scroll for that composable? See one
possible solution in this week’s highlighted Kotlinlang #compose
Slack
thread.
Composable Commentary
Posts, videos, and other new information related to Jetpack Compose!
Medium: Bump’s Journey into Delightful Experiences on Android with Jetpack Compose
The amo team has been using Compose for their Bump social mapping app. This post outlines some of their approaches for animations, photography, and maps in a Compose for Android app.
Medium: Jetpack Compose and Nested Scrolling
Karol Ksionek needed to show a collection of LazyVerticalGrid()
composables
in a LazyColumn()
. By default, Compose does not support nested scrollable
composbales, but the nestedScroll()
modifier can be used to address that issue.
This post is also available in video form.
Medium: 5 Simple Do’s and Don’ts: Jetpack Compose Accessibility Guide
Stefan Kramreither walks us through common things to do — or to avoid —
when implementing accessibility in your Compose UI app. Suggestions range from
setting roles and adding contentDescription
to supporting collectionInfo
and
identifying heading()
composables.
Centering top-level dialog windows in Compose Multiplatform
Thomas Künneth (Bluesky) returns, this time exploring dialogs and windows on Compose Multiplatform. On Compose for Desktop, you might use dialogs with dedicated windows in places where on mobile you might use sheets. Thomas shows how to handle those scenarios, plus how to center the dialogs on the underlying app window.
Medium: Enhancing Dropdown Menus in Jetpack Compose: Implementing Searchable Selection
Kerry Bisset shows us how to implement a dropdown menu with a search field to help users find an item within a long menu.
Other Interesting Links
- Medium: Android Accessibility in Jetpack Compose: Making Apps More Inclusive
- Medium: Creating a Dynamic Country Selector in Jetpack Compose
- Medium: Creating a Logo with Frosted Glass Effect in Jetpack Compose
- Medium: Implementing a Multi-Tab Search Feature in Jetpack Compose
- Medium: Stop Wasting API Calls! The Right Way to Load Data in Jetpack Compose
- Medium: Swipeable Image Carousel with Smooth Animations in Jetpack Compose
- Medium: Understanding Suspended and Non-Suspended Effect Handlers in Jetpack Compose
- Medium: Writing Carousel Pager Using Jetpack Compose
Resource Roundup
100% pure code!
GitHub: cybozu / callout-compose
The cybozu team has implemented an anchoredCallout()
modifier and a Callout()
composable to render tooltip-style callouts associated with other composables, such as for
help or onboarding.
GitHub: VinsonGuo / ComposeLazyTab
Vinson Guo brings us a LazyTabContainer()
that implements tabs with lazy-loading
of tab contents, via delayed execution of the composable lambdas for those contents.
GitHub: mejdi14 / KMP-Liquid-Search
mejdi hafien has created a search field for Compose Multiplatform.
Other Interesting Links
- GitHub: MiguelDK17 / Breeze-Icons (icon library)
- GitHub: mohitsoni48 / PreferenceState (DataStore glue code)
- GitHub: RyuNen344 / Tenugui (
ModalBottomSheet()
compatibility wrapper)
Or, you can subscribe to the Atom feed or follow Mark Murphy in the Fediverse.
Recent Issues:
- 2025-03-11: Compose beta! Compose Multiplatform alpha! Hot reload! Mesh gradients! Strong skipping! Permissions! And... what happens if our desktop goes dark?!?
- 2025-02-25: Viewmodels and previews! TV Compose! A safer marquee! Server-defined UIs! And... do I have a right to be forgotten?!?
- 2025-02-18: New Compose and Compose Multiplatform! Focus! Accordion animations! Skeuomorphic design! Detecting idle users! And... somebody sunk my Fleet?!?