jetc.dev Newsletter Issue #28
Published: 2020-08-25
dev17
shipped! Fortunately, it is a bit smaller of a release than the previous
two releases, to allow us to catch our breath. In this week’s issue, we will look at some
dev17
changes, understand a bit more what RowScope
really is, and see some
preliminary code for dealing with system insets.
Also, the issue has some puns. If you are allergic to puns, please take appropriate steps.
One Off the Stack, One Off the Slack
You’ve got questions. That’s understandable!
<include>
in Compose
In classic View
-based Android development, we might use <include>
to reuse
a layout. In this Stack Overflow question and answer, Google’s Ryan Metzger
and I try to convince someone that simply having a resuable composable is
the equivalent in Compose.
Scoping Child Composables
You might have a composable that makes certain assumptions about where it gets
called, such as “needs to be an immediate child of a Row
”. In this week’s highlighted
Slack thread, we explore how to try to limit the use of that child to the
appropriate parent, via a “scope” marker object.
Composable Commentary
Posts, videos, and other new information related to Jetpack Compose!
Compose Runtime dev17
Release Notes
The big change here is that state()
is deprecated. They want you to use
remember { mutableStateOf() }
, as while that is more verbose, it makes
remember()
more visible, and remember()
is important for Compose developers
to… remember.
Compose UI dev17
Release Notes
Compose’s options for embedding classic Views
are changing: switch to use AndroidView
.
A few more classes are now inline, such as Offset
, Constraints
, and IntSize
.
And there were a lot more focused changes… including adding a FocusManager
and removing FocusModifier
.
Compose Foundation dev17
Release Notes
The Row
and Column
Arrangement
options were… rearranged, with new spacedBy
and aligned
options. Note that custom Arrangement
implementations “will not be supported
in the future”. Also, Modifier.drawBorder()
is now Modifier.border()
, and the various
fillMax...()
modifiers now support fractions in addition to full fills.
Compose Reddit AMA
The Jetpack and Jetpack Compose teams are holding a Reddit AMA. There are already 130 comments in the thread, even though answers will not be arriving until August 27.
Curated Reality on Jetpack Compose
This video is an hour-long recorded live-coding session on the basics of using Compose.
Resource Roundup
100% pure code!
GitHub: arkivanov / Decompose
Arkadii Ivanov brings us a library that offers a RIBs-inspired component-and-routing implementation, to help you create multiple screens with integrated back stack support.
GitHub: AliAzaz / ScaffoldItemsViewTemplate
Ali Azaz Alam has a repo that uses separate branches for separate tutorials
related to Compose. The one linked to here demonstrates Scaffold
, drawers, FABs, and more!
Gist: chrisbanes / Insets.kt
Google’s Chris Banes has a long gist with a series of ambient-driven Modifier
functions that help you consume system insets from your Compose UI (e.g., Modifier.navigationBarWidth()
to help inset away from navigation bars in landscape).
I am really glad that Chris spends as much time automating these things as he does. The only way that we will get developers to pay attention to insets is if we make them as easy as possible to address, and this stuff is terribly complicated. You might think of them as the… banes of my existence. 🥁
Gist: bmc08gt / TransientSnackbar.kt
Brandon McAnsh demonstrates using the delay()
function from coroutines to
automatically dismiss a Snackbar
after a period of time, if it was not dismissed
manually by then.
Gist: bmc08gt / Grid.kt
Brandon also offer this demonstration of his take on a Grid()
composable,
“with main axis and cross axis spacing support similar to FlowRow()
”.
This tweet has a short demo
video.
…And One More Thing
Since this keeps coming up in Stack Overflow and in Slack…
The @Preview
annotations for dev16
and dev17
do not actually deliver previews
to Android Studio 4.2 Canary 7 and earlier. The working theory is that the problem
is tied to the new Compose compiler plugin for Kotlin, which is itself tied to the new
Kotlin 1.4. However, I have not seen an official statement to that effect.
This @Preview
limitation is supposed to be fixed in Android Studio 4.2 Canary 8.
I hope that is the case. The fact that Canary 8 has been slow to roll out makes
me a bit nervous.
Regardless, Google is aware of the issue and hopefully this will be resolved in the near future.
Or, you can subscribe to the Atom feed or follow Mark Murphy in the Fediverse.
Recent Issues:
- 2024-12-10: A Compose Multiplatform alpha! Hot reload! Presentation! Sprites! Calendars!
- 2024-12-03: Rebecca Franks on clipping and masking! Stefano Natali on graphicsLayer()! FunkyMuse on type-safe nav results! And... if we have enough maps, do we need to store our maps in a Map?!?
- 2024-11-26: Math! Shared element transitions! Custom modifiers! Macrobenchmark! Adapting to platform-specific design systems! And... why does wrapContentSize() not wrap my content size?!?