This module provides experimental support for Jetpack Compose UI with workflows.
The only integration that is currently supported is the ability to define ViewFactories that
are implemented as @Composable
functions. See the hello-compose-binding
sample in samples
for
an example of how to use.
DO NOT USE this module in your production apps!
Jetpack Compose is in pre-alpha, developer preview stage. The API is incomplete and changes very frequently. This integration module exists as a proof-of-concept, to show what's possible, and to experiment with various ways to integrate Compose with Workflow.
Add the dependencies from this project (they're on Maven Central):
dependencies {
// Main dependency
implementation "com.squareup.workflow:workflow-ui-core-compose:${versions.workflow_compose}"
// For the preview helpers
implementation "com.squareup.workflow:workflow-ui-compose-tooling:${versions.workflow_compose}"
}
You must be using the latest Android Gradle Plugin 4.x version, and enable Compose support
in your build.gradle
:
android {
buildFeatures {
compose true
}
composeOptions {
kotlinCompilerVersion "1.4.0-dev-withExperimentalGoogleExtensions-20200720"
kotlinCompilerExtensionVersion "${compose_version}"
}
}
To create a ViewFactory
, call composedViewFactory
. The lambda passed to composedViewFactory
is
a @Composable
function.
val HelloBinding = composedViewFactory<MyRendering> { rendering, _ ->
MaterialTheme {
Clickable(onClick = { rendering.onClick() }) {
Text(rendering.message)
}
}
}
The composedViewFactory
function returns a regular ViewFactory
which can be added to a
ViewRegistry
like any other:
val viewRegistry = ViewRegistry(HelloBinding)
Copyright 2020 Square, Inc.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.