Система аккомпаниатораUiController darkIcons не работает на Android 11

Я использую библиотеку «Аккомпанемент systemUiController» и настраиваю

в то время как в светлой теме, но эффект не применяется на устройствах с Android 11. Кажется, он работает, например, на устройствах с Android 10.

Это код, с помощью которого я пытаюсь установить цвета.

       val systemUiController = rememberSystemUiController()
 systemUiController.setStatusBarColor(color=statusBarColor,darkIcons=false) 

куда statusBarColor это более темный цвет, который представляет причину, по которой я хочу белый передний план / значки

В темной теме можно установить darkIcons как для true а также false и эффект применяется соответственно

Это строка состояния в LightTheme с и

Это строка состояния в DarkTheme с darkIcons=false

Это строка состояния в DarkTheme с darkIcons=true

Для справки это весь мой Theme.kt

      private val LightBase = ASBTheme(
    material = lightColors(
        background = FigmaPrimaryWhite,
        onBackground = FigmaTextBlack,
        surface = FigmaPrimaryWhite,
        onSurface = FigmaTextBlack,
        primary = FigmaSecondaryAvastBlue,
        error = FigmaStatusPink,
    ),
    textColorLabel = FigmaSecondaryAvastPurple,
    colorAccent = FigmaPrimaryGreen,
    ... //bunch of custom colors
)

private val DarkBase = ASBTheme(
    material = darkColors(
        background = FigmaPrimaryBlackBg,
        onBackground = FigmaTextWhite,
        surface = FigmaSecondaryAvastBlueDark,
        onSurface = FigmaTextWhite,
        primary = FigmaSecondaryBlackDark,
        error = FigmaStatusPink
    ),
        textColorLabel = FigmaSecondaryAvastPurpleBright,
        colorAccent = FigmaStatusGreen,
        ... //bunch of custom colors
)

private val LocalAsbTheme = staticCompositionLocalOf { LightBase }
var navBarColor: Color? = null
var statusBarColor: Color? = null

@Composable
fun ASBTheme(
    darkTheme: Boolean = isSystemInDarkTheme(),
    content: @Composable () -> Unit
) {
    val colors = if (darkTheme) {
        DarkBase
    } else {
        LightBase
    }
    if (darkTheme) {
        navBarColor = DarkBase.background
        statusBarColor = DarkBase.primary
    } else {
        navBarColor = LightBase.background
        statusBarColor = LightBase.primary
    }

    SetBarsTheme(statusBarColor!!, navBarColor!!)

    CompositionLocalProvider(
        LocalAsbTheme provides colors,
    ) {
        MaterialTheme(
            colors = colors.material,
            content = content,
        )
    }
}

val MaterialTheme.asbTheme: ASBTheme
    @Composable
    @ReadOnlyComposable
    get() = LocalAsbTheme.current

SetBarsTheme() здесь я пытаюсь установить цвета строки состояния в зависимости от события жизненного цикла, чтобы цвета сохранялись после onPause() / onStop(). Я также попытался установить цвета вне этой логики, но ошибка все еще сохраняется.

      @Composable
fun SetBarsTheme(
    statusBarColor: Color,
    navigationBarColor: Color,
    darkIcons:Boolean=false,
) {
    val lifecycleOwner = LocalLifecycleOwner.current
    val systemUiController = rememberSystemUiController()

    DisposableEffect(lifecycleOwner) {
        // Create an observer that triggers our remembered callbacks
        // for sending analytics events
        val observer = LifecycleEventObserver { _, event ->
            if (event == Lifecycle.Event.ON_RESUME) {
               systemUiController.setStatusBarColor(color=statusBarColor,darkIcons)
                systemUiController.setNavigationBarColor(color=navigationBarColor)
            }
        }

        // Add the observer to the lifecycle
        lifecycleOwner.lifecycle.addObserver(observer)

        // When the effect leaves the Composition, remove the observer
        onDispose {
            lifecycleOwner.lifecycle.removeObserver(observer)
        }
    }
}

1 ответ

Исправлена ​​ошибка . Убедитесь, что вы используете последнюю версию Accompanist.

Если вы все еще можете воспроизвести его, вы должны сообщить об этом , включая используемые версии устройств/зависимостей.