jetc.dev Newsletter Issue #39
Published: 2020-11-10
This past week saw the debut of Compose for Desktop, which garnered a lot of attention! So, this week, we look at the Milestone 1 release, how to get started with it, and what it does (and does not) contain.
Beyond that, we look a bit a ActivityResult
and how to use that from a composable,
look a bit more at the previous week’s Navigation and Paging for Compose releases,
plus play with some theme animations and drop-down lists.
One Off the Stack, One Off the Slack
You’ve got questions. That’s understandable!
ActivityResult and Compose
The new ActivityResult
API is Google’s next-generation replacement for
startActivityForResult()
and onActivityResult()
. However, most of the samples
for this are for classic View
-based UIs, driven by activities and fragments.
However, you can use it from Compose as well, as Google’s Ian Lake shows us in
this week’s highlighted Stack Overflow post.
What’s Missing in Compose for Desktop?
If we are going to start experimenting with Compose for Desktop, it is good to have a sense of how it compares with the Compose UI that we have been using in Android. In short: they are fairly comparable, but there are some gaps, as we see in this week’s highlighted Slack thread.
Composable Commentary
Posts, videos, and other new information related to Jetpack Compose!
Compose for Desktop
This is the home for JetBrains’ Compose for Desktop resources, including links to tutorials and samples.
Jetpack Compose for Desktop: Milestone 1 Released
This blog post by JetBrains’ Nikolay Igotti announced the availability of Compose for Desktop and called on us to experiment with it.
Jetpack Compose for the Desktop!
John O’Reilly reviews how to get going with Compose for Desktop, both inside and outside of IntelliJ IDEA.
Create your first Hello World Desktop app using Jetpack Compose Desktop
Nwokocha Wisdom Maduabuchi provides a small walkthrough of the steps to create a sample Compose for Desktop app using the preview release of IntelliJ IDEA.
Implement Bottom Bar Navigation in Jetpack Compose
Ziv Kesten brings us a walkthrough of how to use the new Navigation for Compose
component to handle navigation between screens via a bottom nav bar in a Scaffold()
.
Implementing Paging in Jetpack Compose
Lost in the shuffle of last week’s Navigation for Compose release was that
we also got a Paging for Compose release.
dev.to contributor kriticalflare wrote a post reviewing the basics of adding Paging
to a Compose UI app, showing how it can feed into a LazyColumn()
.
Animating Visibility in Compose
Ben Trengrove continues his Compose tour, this time taking a look at how
we have to re-think the concept of “visibility” that we are used to in the
classic View
framework.
Semantics and TalkBack with Jetpack Compose
Bryan Herbst continues his review of the Compose semantics API, this time looking more closely at how it can interact with Android’s TalkBack screen reader for adding accessibility to Compose apps.
Android Jetpack Compose — Exploring State Based UI
Medium user rajan ks has published a post reviewing how Compose integrates
with the Jetpack ViewModel
and demonstrating a custom LazyGridFor()
implementation.
Jetpack Compose: Scrollable Components
Siva Ganesh Kantamani reviews scrolling in Compose UI, both using simple
scrollable containers (e.g., ScrollableRow()
) and the Lazy
classes
(e.g., LazyColumnFor()
).
Where Compose Could Go
The balding guy who publishes this newsletter wrote a blog post reviewing where else Compose UI-based apps might run, now that we have support for Android and desktop OSes.
Resource Roundup
100% pure code!
GitHub: JetBrains / compose-jb
This is the monorepo for JetBrains’ Compose for Desktop!
GitHub: lcdsmao / Dark-Toggle-Button-Sample-Jetpack-Compose
Mao Yufeng offer us this sample app, showing animating both the icon of a button and the theme of an app from light to dark. Bonus: it works with Compose for Desktop as well!
GitHub: DevSrSouza / svg-to-compose
Gabriel Souza has assembled some code that takes SVG files as input and emits Compose UI source code that renders the SVG as output. The result should be reminiscent of the material icons available in Compose UI… in part because this project uses some of the same code that generated those icons. One of the gaps with Compose for Desktop is the lack of SVG/vector drawable support; this project is a step towards filling that gap.
GitHub: tylerbwong / ComposeDesktopDemo
Tyler Wong contributes a sample Compose for Desktop project. The entire sample fits
in about 120 lines of Kotlin — part of the value is the build.gradle.kts
file that shows how to set up a Compose for Desktop app as a plain Kotlin/JVM project,
without necessarily needing a preview release of IntelliJ IDEA.
Gist: chethu / DropDownMenu
GitHub user Chethan shows off a DropDownList()
wrapper around DropDownMenu()
to simplify showing a drop-down list in a Compose UI app.
…And One More Thing
Apparently, the desktop is not yet dead. Who knew?
The previous week’s release of Navigation for Compose excited the community. That was not too surprising, considering that lots of developers had been asking about it in the past couple of months. Compose is great, but getting past trivial samples requires some sort of navigation system, and now we can start to get the sense for what Google wants to do in this area.
But, while I had gotten some positive feedback from my coverage of Compose for Desktop back in April, I confess that I am surprised by the level of enthusiasm that we saw from the Milestone 1 announcement.
After all, mobile development has been the focus of the past decade, and the Web was the focus for the decade before that. It has been quite some time since the desktop was “front and center” in the eyes of developers… despite the fact that most developers use a desktop OS on a daily basis.
As a certified “old person”, I spent my first decade-and-change writing desktop software. So, I’m pleased that the desktop may make a bit of a renaissance here, at least in terms of developer attention. Being able to share code with Android apps and other platforms (yay, Kotlin/Multiplatform!) means that writing for the desktop should be a lot less of a “heavy lift” than it had been.
So, let’s see what Compose for Desktop can do!
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?!?