kotlin 在不使用片段的情况下,构建首选项屏幕的最佳组合方式是什么?

dw1jzc5e  于 2023-11-21  发布在  Kotlin
关注(0)|答案(3)|浏览(140)

我找不到任何关于如何在不使用片段的情况下以纯Compose方式创建首选项屏幕的文档。
有没有人能建议一下,在不使用片段的情况下,用一个例子来做一个偏好屏幕的最好方法?或者我们应该坚持使用片段的方法?
谢谢你的帮助!

kqlmhetl

kqlmhetl1#

我已经实现了我的手工设置屏幕喷气背包组成.这是我的应用程序使用它的一个例子.我知道这是不完美的,但这里是链接无论如何,如果你想尝试它:
My repository


的数据

xesrikrc

xesrikrc2#

你可以把它写下来。
Jetnews学习应用程序的一个很好的例子:


的数据
如果愿意,你也可以使用第三方库,比如Compose-Settings

bq3bfh9z

bq3bfh9z3#

您可以从一般的PreferenceItem开始,然后使用SwitchCheckbox等组件。

@Composable
fun PreferenceItem(
    title: @Composable () -> Unit,
    modifier: Modifier = Modifier,
    description: @Composable (() -> Unit)? = null,
    icon: @Composable (() -> Unit)? = null,
    onClick: () -> Unit = {},
    action: @Composable (() -> Unit)? = null,
) {
    Row(
        modifier = modifier
            .fillMaxWidth()
            .heightIn(min = LocalPreferenceSpacing.current.itemMinHeight)
            .clickable { onClick() }
            .padding(LocalPreferenceSpacing.current.itemPadding),
        verticalAlignment = Alignment.CenterVertically
    ) {
        if (icon != null) {
            IconContainer(icon = icon)
        }
        Details(
            title = title,
            description = description
        )
        if (action != null) {
            ActionContainer(action = action)
        }
    }
}

个字符
您可以使用来自DataStore<Preferences>的冷流创建Repository。在视图模型中,使用stateIn将其转换为热流。您需要为每个首选项创建一个函数来调用dataStore.edit,这可能很繁琐。对于简单的情况,如isDarkTheme,我只是提供了一个CompositionLocalProvider(LocalDataStore.provides(dataStore)),并在我的可组合函数中直接调用dataStore.data
Full code

相关问题