如何用JetpackCompose实现密码重试计数器



我想统计输入PIN的尝试次数,并相应地显示通知:

val remainingPinCounter = remember { mutableStateOf(3) }
//
if(pinState == WRONG_PIN) {
remainingPinCounter.value--
showWrongPinNotification(remainingPinCounter)
}
@Composable
private fun showWrongPinNotification(retries: MutableStateOf<Int>){
if(retries.value > 0) Log.d("TAG", "Remaining Retries := $retries.value)
else Log.d("TAG", "All $retries.value attempts failed!)
//..
}

但是showWrongPinNotification()是连续调用的,remainingPinCounter增加到-无穷大,尽管我只通过pinState == WRONG_PIN递减它?!我猜状态WRONG_PIN没有改变,因此不断地用递减的值调用showWrongPinNotification

它在没有记忆的情况下正常工作->val remainingPinCounter = 3

if(pinState == WRONG_PIN) {
remainingPinCounter.value--
showWrongPinNotification(remainingPinCounter)
}

如果在下一次重新组合之前不更改pinState,则可能是无限次重新组合。如果是这种情况,则调用每个重新组合条件块,并且remainingPinCounter的值不断变化。

LaunchedEffect(pinState) {
if(pinState == WRONG_PIN) {
remainingPinCounter.value--
showWrongPinNotification(remainingPinCounter)
}
}

另一种选择是使用LaunchedEffect作为只减少一次

最新更新