Wasm has no threads, and that decides your dispatcher
Dispatchers.Default is a single thread in the browser. Code that was merely slow on Android becomes a frozen tab.
We use Google Analytics to see which pages help people. No ads, no profiles. Privacy Policy
Compose, Kotlin, and multiplatform work — the mechanism under the symptom.
296 posts
Dispatchers.Default is a single thread in the browser. Code that was merely slow on Android becomes a frozen tab.
Material's shape scale gives five corner sizes mapped to component categories. The system is simple; the interesting parts are clip ordering, asymmetric corners, and shapes that must respond to state.
Material's type scale gives fifteen named roles instead of a font-size parameter. Naming the role rather than the size is what makes typography consistent across a team and correct at large font scales.
Dynamic colour derives a full Material scheme from the user's wallpaper. It improves the feel of most apps and destroys brand recognition if applied indiscriminately, so the interesting work is deciding what stays fixed.
A mechanical sweep is one hypothesis executed N times. If the hypothesis is wrong, so is every edit.
Two policies, each locally correct, sharing one assumption nobody owned.
The skill is not better judgement. It is knowing which kind of door you are standing at.
MaterialTheme provides three CompositionLocals and a handful of defaults. Understanding its actual shape explains how components pick up styling, why hardcoded values break dark mode, and what a custom theme has to replace.
Line-level comments are the least valuable thing in a review. Three questions outrank all of them.
When an API has no list endpoint, your local record is not a convenience. It is the only state there is.
Material 3's SearchBar transitions into a full-screen suggestion surface, which makes it a navigation concern. Chips come in four semantic variants, and the assist/filter/input/suggestion split matters.
Compose's date and time pickers are straightforward components hiding a genuine trap: the selected value is UTC-midnight epoch millis, and converting it naively shifts dates by one in most of the world.