Kotlin StateFlow & SharedFlow
Kotlin StateFlow & SharedFlow
StateFlow and SharedFlow are hot flows in Kotlin, introduced to handle state and events in a modern, coroutine-friendly way.
They are commonly used in Android (MVVM) and backend reactive systems.
1. Hot Flow vs Cold Flow (Quick Recap)
| Feature | Flow | StateFlow / SharedFlow |
|---|---|---|
| Type | Cold | Hot |
| Starts emitting | On collect | Always active |
| Stores value | ❌ No | ✅ Yes (StateFlow) |
| Multiple collectors | Yes | Yes |
2. StateFlow
🔹 What is StateFlow?
-
Holds one latest value
-
Always has an initial value
-
Emits updates to all collectors
-
Ideal for UI state
Think of
StateFlowas LiveData replacement
Basic StateFlow Example
Collecting:
Key Properties of StateFlow
-
Requires initial value
-
Replays latest value only
-
Never completes
-
Always active
3. SharedFlow
🔹 What is SharedFlow?
-
Used for events
-
Does not require initial value
-
Can emit multiple values
-
Configurable replay & buffer
Think of
SharedFlowas EventBus
Basic SharedFlow Example
Collecting:
4. StateFlow vs SharedFlow (Important)
| Feature | StateFlow | SharedFlow |
|---|---|---|
| Use case | State | Events |
| Initial value | Required | Not required |
| Replay | 1 (latest) | Configurable |
| LiveData alternative | ✅ Yes | ❌ No |
| One-time events | ❌ Not ideal | ✅ Perfect |
5. Replay & Buffer in SharedFlow
-
replay→ re-emit last values to new collectors -
buffer→ handles fast emitters
6. Emit vs TryEmit
7. Collecting Safely
8. Android MVVM Example
9. StateFlow vs LiveData
| Feature | StateFlow | LiveData |
|---|---|---|
| Coroutine support | Native | Limited |
| Thread safety | Yes | Partial |
| Platform | Multiplatform | Android only |
Summary
-
StateFlow → UI State (latest value)
-
SharedFlow → One-time events
-
Both are hot flows
-
Built on coroutines
-
Better than LiveData & Event wrappers
