我找不到任何关于如何在不使用片段的情况下以纯Compose方式创建首选项屏幕的文档。有没有人能建议一下,在不使用片段的情况下,用一个例子来做一个偏好屏幕的最好方法?或者我们应该坚持使用片段的方法?谢谢你的帮助!
kqlmhetl1#
我已经实现了我的手工设置屏幕喷气背包组成.这是我的应用程序使用它的一个例子.我知道这是不完美的,但这里是链接无论如何,如果你想尝试它:My repository
的数据
xesrikrc2#
你可以把它写下来。Jetnews学习应用程序的一个很好的例子:
的数据如果愿意,你也可以使用第三方库,比如Compose-Settings。
bq3bfh9z3#
您可以从一般的PreferenceItem开始,然后使用Switch或Checkbox等组件。
PreferenceItem
Switch
Checkbox
@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
DataStore<Preferences>
Repository
stateIn
dataStore.edit
isDarkTheme
CompositionLocalProvider(LocalDataStore.provides(dataStore))
dataStore.data
3条答案
按热度按时间kqlmhetl1#
我已经实现了我的手工设置屏幕喷气背包组成.这是我的应用程序使用它的一个例子.我知道这是不完美的,但这里是链接无论如何,如果你想尝试它:
My repository
的数据
xesrikrc2#
你可以把它写下来。
Jetnews学习应用程序的一个很好的例子:
的数据
如果愿意,你也可以使用第三方库,比如Compose-Settings。
bq3bfh9z3#
您可以从一般的
PreferenceItem
开始,然后使用Switch
或Checkbox
等组件。个字符
您可以使用来自
DataStore<Preferences>
的冷流创建Repository
。在视图模型中,使用stateIn
将其转换为热流。您需要为每个首选项创建一个函数来调用dataStore.edit
,这可能很繁琐。对于简单的情况,如isDarkTheme
,我只是提供了一个CompositionLocalProvider(LocalDataStore.provides(dataStore))
,并在我的可组合函数中直接调用dataStore.data
。Full code