我正在Compose
中实现PreferencesScreen
,并且我已经实现了所有组件,如PreferencesSwitch
,CheckBox
等。
现在我想知道是否有任何方法可以使所有组件只能在PreferencesScreen
函数的范围内使用,而不能在它之外使用。
例如,在LazyColumn
中,items
只能在LazyColumnScope
中使用。我看了它的实现,但它使用了注解@LazyScopeMarker
,所以我假设不同的作用域有不同的标记?
- 预期行为:**
PreferencesScreen{
PreferencesCheckBox(...){ ... }
}
是可能的,
PreferencesCheckBox(...){ ... }
单独是不可能的。
2条答案
按热度按时间qeeaahzv1#
你可以像
LazyColumn
一样声明一些作用域:这里使用
interface
/class ...Impl
,以确保没有其他屏幕可以重用PreferencesScreenScopeImpl
,也增加了测试的可能性。在
PreferencesScreen
中使用:使用
PreferencesScreen
如下:jm81lzqq2#
我想向
LazyListScope
添加函数,但只能在Preferences
下使用。我发现的最简单的方法是使用一个接口作为标志,并委托LazyListScope
的实现。现在我可以使用
PreferencesScope
编写扩展函数了。