@@ -35,7 +35,6 @@ import kotlinx.datetime.Clock
3535import kotlinx.datetime.LocalTime
3636import kotlinx.datetime.TimeZone
3737import kotlinx.datetime.toLocalDateTime
38- import java.util.Locale
3938
4039@Composable
4140fun TimePicker (
@@ -104,20 +103,20 @@ private fun TimePicker12Hour(
104103 TimePeriod .PM .getLabel(localeTimeFormat)
105104 )
106105 }
107- val hourItems = remember { (1 .. 12 ).map { it.toString() } }
108- val minuteItems = remember { (0 .. 59 ).map { String .format( Locale . ROOT , " %02d " , it) } }
106+ val hourItems = remember { (1 .. 12 ).toList() }
107+ val minuteItems = remember { (0 .. 59 ).toList() }
109108
110109 val amPmPickerState = rememberPickerState(
111- selectedItem = amPmItems.indexOf( if (initialTime.hour < 12 ) amPmItems[ 0 ] else amPmItems[ 1 ]).toString() ,
112- startIndex = if (initialTime.hour < 12 ) 0 else 1
110+ initialIndex = if (initialTime.hour < 12 ) 0 else 1 ,
111+ items = amPmItems
113112 )
114113 val hourPickerState = rememberPickerState(
115- selectedItem = hourItems.indexOf(( if (initialTime.hour % 12 == 0 ) 12 else initialTime.hour % 12 ).toString()).toString( ),
116- startIndex = hourItems.indexOf(( if (initialTime.hour % 12 == 0 ) 12 else initialTime.hour % 12 ).toString())
114+ initialIndex = hourItems.indexOf(if (initialTime.hour % 12 == 0 ) 12 else initialTime.hour % 12 ),
115+ items = hourItems
117116 )
118117 val minutePickerState = rememberPickerState(
119- selectedItem = minuteItems.indexOf(initialTime.minute.toString().padStart( 2 , ' 0 ' )).toString( ),
120- startIndex = minuteItems.indexOf(initialTime.minute.toString().padStart( 2 , ' 0 ' ))
118+ initialIndex = minuteItems.indexOf(initialTime.minute),
119+ items = minuteItems
121120 )
122121
123122 var previousHour by remember { mutableIntStateOf(initialTime.hour) }
@@ -196,7 +195,7 @@ private fun TimePicker12Hour(
196195 )
197196
198197 scope.launch {
199- val currentHour = hourPickerState.selectedItem.toIntOrNull() ? : 0
198+ val currentHour = hourPickerState.selectedItem
200199
201200 if (currentHour == 12 && previousHour == 11 ) {
202201 val currentIndex = amPmPickerState.lazyListState.firstVisibleItemIndex % amPmItems.size
@@ -223,6 +222,9 @@ private fun TimePicker12Hour(
223222 modifier = Modifier .weight(1f ),
224223 textModifier = Modifier .padding(8 .dp),
225224 infiniteScroll = true ,
225+ itemFormatter = { item ->
226+ item.toString().padStart(2 , ' 0' )
227+ },
226228 onValueChange = {
227229 onPickerValueChange(
228230 amPmPickerState,
@@ -252,16 +254,16 @@ private fun TimePicker24Hour(
252254 selector : PickerSelector ,
253255 onValueChange : (LocalTime ) -> Unit
254256) {
255- val hourItems = remember { (1 .. 23 ).map { it.toString() } }
256- val minuteItems = remember { (0 .. 59 ).map { String .format( Locale . ROOT , " %02d " , it) } }
257+ val hourItems = remember { (1 .. 23 ).toList() }
258+ val minuteItems = remember { (0 .. 59 ).toList() }
257259
258260 val hourPickerState = rememberPickerState(
259- selectedItem = hourItems.indexOf(( if ( initialTime.hour % 12 == 0 ) 12 else initialTime.hour % 12 ).toString()).toString( ),
260- startIndex = hourItems.indexOf(( if (initialTime.hour % 12 == 0 ) 12 else initialTime.hour % 12 ).toString())
261+ initialIndex = hourItems.indexOf(initialTime.hour),
262+ items = hourItems
261263 )
262264 val minutePickerState = rememberPickerState(
263- selectedItem = minuteItems.indexOf(initialTime.minute.toString().padStart( 2 , ' 0 ' )).toString( ),
264- startIndex = minuteItems.indexOf(initialTime.minute.toString().padStart( 2 , ' 0 ' ))
265+ initialIndex = minuteItems.indexOf(initialTime.minute),
266+ items = minuteItems
265267 )
266268
267269 Box (modifier = modifier.fillMaxWidth()) {
@@ -342,6 +344,9 @@ private fun TimePicker24Hour(
342344 modifier = Modifier .weight(1f ),
343345 textModifier = Modifier .padding(8 .dp),
344346 infiniteScroll = true ,
347+ itemFormatter = { item ->
348+ item.toString().padStart(2 , ' 0' )
349+ },
345350 onValueChange = {
346351 onPickerValueChange(
347352 hourPickerState,
@@ -359,15 +364,15 @@ private fun TimePicker24Hour(
359364}
360365
361366private fun onPickerValueChange (
362- amPmState : PickerState ,
363- hourState : PickerState ,
364- minuteState : PickerState ,
367+ amPmState : PickerState < String > ,
368+ hourState : PickerState < Int > ,
369+ minuteState : PickerState < Int > ,
365370 localeTimeFormat : LocaleTimeFormat ,
366371 onValueChange : (LocalTime ) -> Unit
367372) {
368373 val amPm = amPmState.selectedItem
369- val hour = hourState.selectedItem.toIntOrNull() ? : 0
370- val minute = minuteState.selectedItem.toIntOrNull() ? : 0
374+ val hour = hourState.selectedItem
375+ val minute = minuteState.selectedItem
371376
372377 val adjustedHour = when (localeTimeFormat) {
373378 LocaleTimeFormat .ENGLISH -> {
@@ -396,12 +401,12 @@ private fun onPickerValueChange(
396401}
397402
398403private fun onPickerValueChange (
399- hourState : PickerState ,
400- minuteState : PickerState ,
404+ hourState : PickerState < Int > ,
405+ minuteState : PickerState < Int > ,
401406 onValueChange : (LocalTime ) -> Unit
402407) {
403- val hour = hourState.selectedItem.toIntOrNull() ? : 0
404- val minute = minuteState.selectedItem.toIntOrNull() ? : 0
408+ val hour = hourState.selectedItem
409+ val minute = minuteState.selectedItem
405410
406411 val newTime = LocalTime (hour, minute)
407412
0 commit comments