Baudouin
05/14/2023, 2:37 PMDate()
J'essaie d'enregistrer un interval (un peu comme un timer) donc j'enregistre une date de départ puis une date de d'arrivé dans un objet.
Voici mon code :
val recordingContraction = remember { mutableStateOf(false) }
var startTime: Date = Date()
fun onAddButtonClicked() {
if (recordingContraction.value) {
viewModel.contractionUiState.copy(startTime = startTime, endTime = Date())
coroutineScope.launch {
viewModel.saveContraction()
}
recordingContraction.value = false
} else {
recordingContraction.value = true
startTime = Date()
}
}
Ce qui est étrange c'est que à l'enregistrement mon startTime et mon endTime sont les mêmes, comme si tout était initialisé au moment de l'enregistrement.
Est ce que quelqu'un aurait une petite idée ?
PS : j'utilise Date et pas LocalDateTime parce que je dois enregistrer dans Room.bmo
05/15/2023, 7:33 AMremember
, il est donc écrasé à chaque fois que ton composable est exécutéRenaud
05/15/2023, 8:19 AMjava.util.Date
?Baudouin
05/15/2023, 1:32 PMRenaud
05/15/2023, 1:33 PMjava.time
(il faut desugar + java 1.8) et utiliser Duration
(pour un intervalle en time) ou Interval
(pour un interval en jours). Ca se construit très bien avec des LocalDateTime
Baudouin
05/15/2023, 1:52 PMstartTime
de fin
n'est pas égal à celui de début
C'est donc que malgré le remember il continue à être écrasé.
val coroutineScope = rememberCoroutineScope()
val recordingContraction = remember { mutableStateOf(false) }
var startTime by remember { mutableStateOf(Date()) }
fun onAddButtonClicked() {
Log.e("fonction", startTime.toString())
if (recordingContraction.value) {
Log.e("fin", startTime.toString())
viewModel.contractionUiState.copy(startTime = startTime, endTime = Date())
coroutineScope.launch {
viewModel.saveContraction()
}
recordingContraction.value = false
} else {
Log.e("debut", startTime.toString())
recordingContraction.value = true
startTime = Date()
}
}