Loading...
Loading...
Expert guidance for working with Wear OS Compose Material3. Use this skill when creating, updating or migrating Wear OS projects. This includes the androidx.wear.compose.material3, androidx.wear.compose.foundation and androidx.wear.compose.navigation3 libraries. Also working with core components such as AppScaffold, ScreenScaffold and TransformingLazyColumn. Migration from earlier versions such as Material 2.5 and Horologist.
npx skill4agent add android/skills jetpack-compose-m3{VERSION}androidx.wear.compose:compose-material3{VERSION}-alpha-beta-rcorg.jetbrains.kotlin.plugin.composekotlinCompilerExtensionVersioncomposeOptionsminSdklibs.versions.tomlbuild.gradle.kts{VERSION}ChipButton<artifact>-<version>-samples-sources.jarcompose-material3compose-foundationcompose-navigation3build.gradle.ktslibs.versions.toml{VERSION}<SKILL_ROOT>/samples/{VERSION}/.kt~/.gradle$GRADLE_USER_HOME<GRADLE_USER_HOME>/caches<CACHE_ROOT>{ARTIFACT}["material3", "foundation"]androidx.wear.compose.navigation3{ARTIFACT}androidx.wear.compose/compose-{ARTIFACT}/{VERSION}findfind <CACHE_ROOT>/modules-2/files-2.1/androidx.wear.compose/compose-{ARTIFACT}/{VERSION}/ \
-name "*samples-sources.jar"<SKILL_ROOT>/samples/{VERSION}/{ARTIFACT}/unzip -j.ktonClickonLongClickAppScaffoldScreenScaffoldAppScaffoldScreenScaffoldAppScaffoldScreenScaffoldAppScaffoldScreenScaffoldScalingLazyColumnTransformingLazyColumnTransformingLazyColumnimport androidx.wear.compose.foundation.lazy.TransformingLazyColumn
import androidx.wear.compose.foundation.lazy.TransformingLazyColumnDefaults
import androidx.wear.compose.foundation.lazy.rememberTransformingLazyColumnState
// ...
import androidx.wear.compose.material3.lazy.rememberTransformationSpec
import androidx.wear.compose.material3.lazy.transformedHeightval columnState = rememberTransformingLazyColumnState()
val transformationSpec = rememberTransformationSpec()
ScreenScaffold(
scrollState = columnState
) { contentPadding ->
TransformingLazyColumn(
state = columnState,
contentPadding = contentPadding
) {
item {
ListHeader(
modifier = Modifier
.fillMaxWidth()
.transformedHeight(this, transformationSpec)
.minimumVerticalContentPadding(ListHeaderDefaults.minimumTopListContentPadding),
transformation = SurfaceTransformation(transformationSpec)
) {
Text(text = "Header")
}
}
// ... other items
item {
Button(
modifier = Modifier
.fillMaxWidth()
.transformedHeight(this, transformationSpec)
.minimumVerticalContentPadding(ButtonDefaults.minimumVerticalListContentPadding),
transformation = SurfaceTransformation(transformationSpec),
onClick = { /* ... */ },
icon = {
Icon(
imageVector = Icons.Default.Build,
contentDescription = "build",
)
},
) {
Text(
text = "Build",
maxLines = 1,
overflow = TextOverflow.Ellipsis,
)
}
}
}
}TransformingLazyColumnScalingLazyColumncontentPaddingScreenScaffoldTransformingLazyColumnminimumVerticalContentPaddingButtonDefaultsCardDefaultsTransformingLazyColumnItemScopetransformedHeighttransform = SurfaceTransform(...)flingBehaviorrotaryScrollableBehaviorval columnState = rememberTransformingLazyColumnState()
ScreenScaffold(scrollState = columnState) { contentPadding ->
TransformingLazyColumn(
state = columnState,
flingBehavior = TransformingLazyColumnDefaults.snapFlingBehavior(columnState),
rotaryScrollableBehavior = RotaryScrollableDefaults.snapBehavior(columnState)
) {
// ...
// ...
}
}ScreenScaffoldscrollIndicator!LocalScrollCaptureInProgress.currentEdgeButtonTransformingLazyColumnScreenScaffoldTransformingLazyColumnval columnState = rememberTransformingLazyColumnState()
ScreenScaffold(
scrollState = columnState,
edgeButton = {
EdgeButton(
onClick = { /* TODO */ },
modifier = Modifier.scrollable(
columnState,
orientation = Orientation.Vertical,
reverseDirection = true,
// Apply overscroll to the EdgeButton for proper scrolling behavior.
overscrollEffect = rememberOverscrollEffect(),
)
) {
Text("More")
}
}
) { contentPadding ->
TransformingLazyColumn(
contentPadding = contentPadding,
state = columnState,
) {
// ...
// ...
}
}ColumnScreenScaffoldTransformingLazyColumntypographyMaterialThemecolorSchemeMaterialThemeButtonButtonDefaults*DefaultsWearPreviewDevicesWearPreviewFontScalesLocalAmbientModeManagerAmbientLifecycleObserverSwipeDismissableSceneStrategy()compose-navigation3