Skip to content

Latest commit

 

History

History
 
 

compose

workflow-kotlin-compose

GitHub license Maven Central

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.


Pre-Alpha

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.


Usage

Add the dependency

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}"
}

Enable 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)

License

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.