Shivam Kumar Jha
08/27/2021, 7:01 AMdarkmoon_uk
08/27/2021, 7:07 AMdarkmoon_uk
08/27/2021, 7:07 AMdarkmoon_uk
08/27/2021, 7:07 AMdarkmoon_uk
08/27/2021, 7:07 AMState
.darkmoon_uk
08/27/2021, 7:08 AMState
, it becomes idempotent.darkmoon_uk
08/27/2021, 7:09 AMShivam Kumar Jha
08/27/2021, 7:41 AMdarkmoon_uk
08/27/2021, 12:32 PMdarkmoon_uk
08/27/2021, 12:33 PMdarkmoon_uk
08/27/2021, 12:34 PM@Composable
darkmoon_uk
08/27/2021, 12:35 PMAnimatedContent
blocks.darkmoon_uk
08/27/2021, 12:36 PMIan Lake
08/27/2021, 3:10 PMZach Klippenstein (he/him) [MOD]
08/27/2021, 4:25 PMdarkmoon_uk
08/27/2021, 4:43 PMRay Ryan
08/27/2021, 4:56 PMRay Ryan
08/27/2021, 4:59 PMRay Ryan
08/27/2021, 5:00 PMZach Klippenstein (he/him) [MOD]
08/27/2021, 5:00 PMRay Ryan
08/27/2021, 5:01 PMWill Shelor
08/27/2021, 5:47 PMfun throttle(durationMs: Long = 500, function: () -> Unit): () -> Unit = {
val currentTime = SystemClock.uptimeMillis()
if (lastExecutedTimestamp ?: 0 + durationMs <= currentTime) {
lastExecutedTimestamp = currentTime
function.invoke()
}
}
and we use it like this:
onClick = throttle { viewModel.onEvent(Event.ButtonTappedEvent) },
Most of our click listeners do this, so that errant or simultaneous clicks don’t result in duplicate (possibly conflicting) navigation or actions