android 如何在KotlinMultiplatform移动的中使用Compose更改屏幕亮度

db2dz4w8  于 2023-05-12  发布在  Android
关注(0)|答案(1)|浏览(137)

我正在尝试编写一种方法,在KotlinMultiplatform Compose中单击按钮后将屏幕亮度设置为最大。
我创建了一个实际的函数,看起来像这样:

expect fun setBrightness(brightness: Float)

然后在commonMain模块中实现了Android和iOS端的实际类。
安卓系统:

actual fun setBrightness(brightness: Float) {
    val window = requireActivity().window
    val layoutParams = window.attributes
    layoutParams.screenBrightness = brightness // set the brightness value between 0 and 1
    window.attributes = layoutParams
}

iOS:

actual fun setBrightness(brightness: Float) {
    UIScreen.main.brightness = brightness
}

问题是requireActivity()在共享目录中的androidMain模块中未解析。我该怎么办?我想这是因为它只在原生Android端可用。
如何使用KMM在两个平台上设置亮度,以便在Compose中工作?

b1payxdu

b1payxdu1#

您应该考虑这种方法:
1.在commonMain中创建接口

interface BrightnessController{
        fun setBrightness(value: Float)
    }

1.然后在commonMain中创建expect

expect class BrightnessControllerImpl: BrightnessController

1.然后为Android创建actual

actual class BrightnessControllerImpl(val context: Context): BrightnessController {
        ...
    }

1.然后你只需要注入context(在Koin中你可以使用androidContext()

相关问题