Implementation
Creating a Settings UI#
Providers can expose a custom settings screen that the host app shows when the user opens your provider.
Overview#
In the capability-first SDK, settings UI lives on the plugin entry class:
class TestProviderPlugin : ProviderPlugin() {
@Composable
override fun SettingsScreen() {
// Your settings UI here
}
}Use settings: ProviderSettings to persist provider configuration.
manifest and settings are assigned by the host at runtime.
Don’t access them in init {} blocks or property initializers unless you use by lazy { ... }.
Basic usage#
This example uses Material 3 components and stores values into ProviderSettings.
private const val KEY_HD_ENABLED = "hd_enabled"
private const val KEY_API_KEY = "api_key"
@Composable
override fun SettingsScreen() {
var isHdEnabled by remember {
mutableStateOf(settings.getBool(KEY_HD_ENABLED, false))
}
var apiKey by remember {
mutableStateOf(settings.getString(KEY_API_KEY, "") ?: "")
}
Column(
modifier = Modifier
.fillMaxWidth()
.padding(16.dp)
) {
Row(
modifier = Modifier.fillMaxWidth(),
verticalAlignment = Alignment.CenterVertically,
) {
Text(
text = "Enable HD quality",
modifier = Modifier.weight(1f),
)
Switch(
checked = isHdEnabled,
onCheckedChange = { newValue ->
isHdEnabled = newValue
settings.setBool(KEY_HD_ENABLED, newValue)
},
)
}
Spacer(Modifier.height(16.dp))
OutlinedTextField(
value = apiKey,
onValueChange = { newValue ->
apiKey = newValue
settings.setString(KEY_API_KEY, newValue)
},
label = { Text("API key") },
modifier = Modifier.fillMaxWidth(),
)
}
}Supported data types#
ProviderSettings supports primitives and JSON-serializable objects.
// Boolean
settings.getBool("feature_enabled", false)
settings.setBool("feature_enabled", true)
// Numbers
settings.getInt("max_quality", 1080)
settings.setFloat("playback_speed", 1.5f)
settings.setLong("timestamp", System.currentTimeMillis())
// Strings
settings.getString("username", "default")
settings.setString("server_url", "https://api.example.com")
// Custom objects (must be Kotlinx-Serializable)
@Serializable
data class ServerConfig(val url: String, val port: Int)
settings.setObject("server_config", ServerConfig("localhost", 8080))
val config = settings.getObject<ServerConfig>("server_config")
// Unknown type helpers
settings.getUnknown("username", 1) // Int default
settings.setUnknown("message", "Hello World!")Additional helpers#
settings.exists("key")settings.remove("key")settings.toggleBool("feature_flag", false)settings.resetSettings()settings.allKeys
For more information, see the API reference:
