Estoy haciendo una implementación de PreferencesScreen en Compose y he hecho todos los componentes como PreferencesSwitch , CheckBox , etc.
Ahora me pregunto si hay alguna manera de hacer que todos los componentes solo se puedan usar dentro del alcance de la función PreferencesScreen y no se puedan usar fuera de ella.
Como por ejemplo, en LazyColumn , los items solo se pueden usar dentro LazyColumnScope . Observé su implementación, pero usó la anotación @LazyScopeMarker , así que supongo que hay diferentes marcadores para diferentes ámbitos.
Comportamiento esperado:
PreferencesScreen{ PreferencesCheckBox(...){ ... } } es posible pero,
PreferencesCheckBox(...){ ... }solo no es posible.
Puede declarar algún alcance igual que lo hace LazyColumn :
interface PreferencesScreenScope { @Composable fun PreferencesCheckBox() } private class PreferencesScreenScopeImpl: PreferencesScreenScope { @Composable override fun PreferencesCheckBox() { } } interface / class ...Impl se usa aquí para asegurarse de que ninguna otra pantalla pueda reutilizar PreferencesScreenScopeImpl , también agrega la posibilidad de prueba.
Úselo en PreferencesScreen :
@Composable fun PreferencesScreen(content: @Composable PreferencesScreenScope.() -> Unit ) { PreferencesScreenScopeImpl().content() } Use PreferencesScreen así:
PreferencesScreen { PreferencesCheckBox() }