jetc.dev Newsletter Issue #34
alpha04 is here. The
Box() is dead; long live the new
Beyond that, we will explore more about how themes work and how you can create your own custom theme. Also, we will look at creating swipeable pages, sortable tables, and Compose-driven presentations.
alpha04 requires the use of Android Studio 4.2 Canary 13. That combination
seems to have stability issues, which is unfortunate, understandable, and explored
more at the end of the newsletter.
One Off the Stack, One Off the Slack
You’ve got questions. That’s understandable!
Calling Suspend Functions from Composable Callbacks
Many composables take function types as callback parameters, such as for click events
Button(). Sometimes, you might want to call a
suspend function from those
callbacks. However, usually those callback function types do not themselves declare
suspend, so you cannot just call a
suspend function from them — you need
to wrap it in a coroutine launcher. We explore a bit more about how that works in
this week’s highlighted Stack Overflow post.
What Is a Theme, Anyway?
What seemed like a simple question about how to get a material-styled
resulted in an exploration of how themes and colors work.
is not magic: it is just a collection of ambients. We explore more about this
in this week’s highlighted Slack thread.
Posts, videos, and other new information related to Jetpack Compose!
alpha04 Release Notes
It appears that we now have two
Box() implementations, the original (now deprecated)
and the new one (formerly known as
Stack()). We now have
LazyListState for being
able to track the state of
LazyRow() composables, and that
state is already set up to save the scroll position in instance state. Also, if you were
using some modifiers tied specifically to
ColumnScope, those will
no longer be available outside of those scopes.
alpha04 Release Notes
Some Material composables, such as
Switch(), now expose
InteractionState parameters, so their states can be managed and observed
from higher-level composables.
Building a Design System implementation using Jetpack Compose — Part1 (Theme)
Part of the power of Compose UI is not just in being able to rapidly assemble user interfaces, but in creating a library of composables that implement a set of design primitives that designers can use to make it easier to match mockups to implementations. Howie Zuo is starting to explore this area, with a post on creating a custom theme implementation.
Jetpack Compose ViewPager
Jorge Castillo returns with a post on creating a swipeable container composable,
designed to provide similar capabilities to
It reviews the
Pager() implementation from Google’s JetCaster sample app.
First steps in Jetpack Compose, Part 1 — the power of @Preview
Zhelyazko Atanasov brings us a review of various properties that you can declare
@Preview to configure how previews work, reminiscent of
this blog post from July.
100% pure code!
All the way back in issue #4 I mentioned Zach Klippenstein’s DSL for creating and rendering rich text in Compose UI. It gets a “re-up” in this issue because Zach added another library to the project, one that renders presentation-style slideshows, with a set of stock slide structures and a set of composables for populating them.
GitHub: hashlin / ComposeDataTable
Lin Min Phyo brings us a library that implements a table composable, with headers and rows with columns. It offers sorting by column, optional row selection, and more!
GitHub: iambaljeet / GitReposCompose
Baljeet Singh is back, with another sample Compose UI app. This particular example uses the GitHub API to let you browse public GitHub repositories.
…And One More Thing
Based on the questions and comments appearing in Slack and Stack Overflow,
it appears that Compose ecosystem stability took a hit with Android Studio
4.2 Canary 13 and Compose
alpha04. Stability had been on a bit of a downward
trend in Studio support for Compose for a while, but this seems like a significant
jump in the wrong direction. This is exacerbated by the requirement
that you use Canary 13 for
Ideally, this stuff would work better.
However, do bear in mind that this is still “bleeding edge”. Given the definition of “Canary” builds, both Studio and Compose are alphas. Alphas are going to have problems from time to time. That is not unique to these two pieces of technology and it is not unique to Google. Just because we got past the “developer preview” phase does not mean that Compose is rock-solid and that everything we do with it comes up with rainbows and unicorns. Sometimes, the unicorns will be more like this one.
(WARNING: the preceding link contains unicorn-delivered violence, with lots of fake blood)
(WARNING: it also contains a scary clown, which in no way should be considered a metaphor for anything related to Android app development)
With luck, things will improve in the coming weeks.
In the meantime, though, you are going to need to live with the fact that, from time to time, you will need to put your Compose experiments to the side for a while and wait for stability to improve. Or, you will need to live with the fact that you are helping improve the stability, by filing bug reports with projects that reproduce problems. If enough developers contribute this way, stability can get better faster for everyone… but if you are not in position to contribute bug reports, that is fine.
Beyond that, keep calm and code on.
Or, you can subscribe to the Atom feed or follow Mark Murphy in the Fediverse.
- 2023-05-30: Compose beta! Tracking continuous composable presses! Animated carousels! MVI! 2D scrolling layouts! Tables! And... a stable function?!?
- 2023-05-23: Focus and preview cards for Compose for TV! Interactions and visual states! ViewCompositionStrategy! Compose for iOS, for real! @email@example.com is zooming! Data tables! And... BasicTextField2, the sequel?!?
- 2023-05-16: Google I/O! New Compose BOM and alpha! Viewmodels! BottomScaffold()! SealedX! Lottie! Dynamic themes! Floating action menus!