PinnedInLevel Up Codingbychanzmao·Sep 30ViewModel Doesn’t Hold UiState. It Derives It.A Declarative Approach to ViewModel StateA response icon2A response icon2
PinnedInProAndroidDevbychanzmao·Aug 10Android Architecture Is Moving from Event-Driven UI to State-Driven UIGoogle’s official Android guidance was updated on May 18, 2026 — and it now explicitly recommends turning ViewModel events into UI stateA response icon7A response icon7
PinnedInProAndroidDevbychanzmao·Jul 31Android Architecture Is Quietly Moving Beyond ViewModel as a State HolderCompose didn’t replace ViewModel. Navigation 3 didn’t replace it either. Together, they’re redefining where state belongs.A response icon2A response icon2
InLevel Up Codingbychanzmao·Nov 2Automating Android Wireless Debugging with Shell ScriptQR Code Pairing, mDNS Discovery, and ADB Automation
InProAndroidDevbychanzmao·Oct 29Under the Hood: How Room 3.0 and SQLDelight 2.x Detect Database ChangesRoom and SQLDelight both let us observe database queries as Kotlin Flows. When the underlying data changes, the Flow emits an update…
InProAndroidDevbychanzmao·Oct 29Kotlin Flow Debugging: Trace combine and flatMapLatest with onEachInspect emissions, find unexpected recomputations, and debug Flow pipelines with minimal code.
InProAndroidDevbychanzmao·Oct 15The Power of stateIn in ViewModelBuilding Declarative UI State with Kotlin Flow.A response icon2A response icon2
InProAndroidDevbychanzmao·Oct 13The Evolution of Flow Collection in Jetpack ComposeFrom basic state collection to lifecycle-aware UI updatesA response icon1A response icon1
chanzmao·Oct 810 Flow Operators for Building a Declarative UiStateIf you update a MutableStateFlow by hand all over your ViewModel, it gets hard to answer a simple question: who changed this state, and…A response icon1A response icon1