Почему значок плавающей кнопки в составлении не будет меняться при изменении какого-либо значенияAndroid

Форум для тех, кто программирует под Android
Ответить
Anonymous
 Почему значок плавающей кнопки в составлении не будет меняться при изменении какого-либо значения

Сообщение Anonymous »

У меня есть функция создания сообщения

Код: Выделить всё

@Composable
fun MediaPlayerController(
isMediaPlaying: Boolean,
onStart: () -> Unit,
onNext: () -> Unit
) {
Row() {
FloatingActionButton(
onClick = { onStart() },
) {
Icon(imageVector = if (isMediaPlaying) Icons.Filled.Pause else Icons.Filled.PlayArrow, contentDescription = null)

}
}
}

Код: Выделить всё

@Composable
fun BottomBarPlayer(
media: Media,
isMediaPlaying: Boolean,
onStart: () -> Unit,
onNext: () -> Unit,
) {
BottomAppBar(content = {
Column(
) {
Row(
) {
MediaPlayerController(
isMediaPlaying = isMediaPlaying,
onStart = onStart,
onNext = onNext
)
}
}
})
}

Код: Выделить всё

@Composable
fun App(
isMediaPlaying: Boolean,
mediaList: MutableList,
currentPlayingMedia: Media,
onItemClicked: (Int) -> Unit,
) {
Scaffold(        bottomBar = {
BottomBarPlayer(media = currentPlayingMedia , isMediaPlaying =isMediaPlaying , onStart = onStart,onNext=onNext,navController=navController)
}
)

}
}

Код: Выделить всё

    @Composable
fun Main() {
LMusicTheme {
Surface(
) {
App(
isMediaPlaying = viewModel.isPlaying,
currentPlayingMedia = viewModel.currentSelectedMedia,
onStart = {
viewModel.onUiEvents(UIEvents.PlayToggle)
},
}
}
}

Код: Выделить всё

  fun onUiEvents(uiEvents: UIEvents) = viewModelScope.launch {
when(uiEvents){
UIEvents.SeekToNext ->mediaPlayerServiceHandle.onPlayerEvents(PlayerEvent.SeekToNext)
is UIEvents.PlayToggle -> {
mediaPlayerServiceHandle.onPlayerEvents(
PlayerEvent.PlayToggle
)
}
}
}

Код: Выделить всё

 suspend fun onPlayerEvents(
playerEvent: PlayerEvent, selectedAudioIndex: Int = -1, seekPosition: Long = 0
) {
when (playerEvent) {
PlayerEvent.PlayToggle -> playToggle()
PlayerEvent.SelectMediaChange -> {
when (selectedAudioIndex) {
exoPlayer.currentMediaItemIndex -> {
if (exoPlayer.isPlaying){
_mediaState.value = MediaState.Playing(
isPlaying = false
)
playToggle()
}else{
_mediaState.value = MediaState.Playing(
isPlaying = true
)
playToggle()
}
}

else -> {
exoPlayer.seekToDefaultPosition(selectedAudioIndex)
_mediaState.value = MediaState.Playing(
isPlaying = true
)
exoPlayer.playWhenReady = true
startProgressUpdate()
}
}
}
}
}
}

Код: Выделить всё

  private suspend fun playToggle() {
if (exoPlayer.isPlaying) {
exoPlayer.pause()
_mediaState.value = MediaState.CurrentPlaying(
exoPlayer.currentMediaItemIndex
)
_mediaState.value = MediaState.Playing(
isPlaying = false
)        } else {
_mediaState.value = MediaState.Playing(
isPlaying = true
)
exoPlayer.play()
_mediaState.value = MediaState.CurrentPlaying(
exoPlayer.currentMediaItemIndex
)
}
}
В MediaViewModel

Код: Выделить всё

    var isPlaying by savedStateHandle.saveable { mutableStateOf(false) }

private val _uiState: MutableStateFlow = MutableStateFlow(UIState.Initial)
val uiState: StateFlow  = _uiState.asStateFlow()
В MediaServiceHandle

Код: Выделить всё

sealed class MediaState {
object Initial : MediaState()
data class Ready(val duration: Long) : MediaState()
data class Progress(val progress: Long) : MediaState()
data class Buffering(val progress: Long) : MediaState()
data class Playing(val isPlaying: Boolean) : MediaState()
data class CurrentPlaying(val mediaItemIndex: Int) : MediaState()
}
Я не знаю, почему я нажимаю эту кнопку с плавающей запятой, ее значок не меняется, хотя isPlaying были изменены
Я не знаю, как это изменилось, я нуд, пожалуйста, помогите мне, спасибо
я не могу публиковать больше кода, я пытаюсь удалить код, который кажется бесполезным для этого вопроса, если нужно, я опубликую, извините, я нуб
p>
Честно говоря, я хочу попробовать использовать currentRecomposeScope.invalidate(), но думаю, что это нехорошо, есть другие способы?

Подробнее здесь: https://stackoverflow.com/questions/787 ... -value-cha
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Android»