Skip to content

JetTheme

JetTheme is a flexible theme provider for Jetpack Compose.

  • Change the theme and recompose the UI dynamically.
  • Save theme preference to local storage.
  • Build your own design system.

Download

dependencies {
  // Use this if you want material design support (recommended)
  implementation "dev.lcdsmao.jettheme:jettheme-material:$latestVersion"
  // Use this if you want to build custom design system
  implementation "dev.lcdsmao.jettheme:jettheme:$latestVersion"
}

Quick Start

Provide Themes

Define your material themes themes using buildMaterialThemePack.

val AppTheme = buildMaterialThemePack {
  defaultMaterialTheme(
    colors = lightColors(...),
    typography = Typography(...),
    shapes = Shapes(...),
  )
  materialTheme(
    id = darkId,
    colors = darkColors(...),
  )
  materialTheme(
    id = "other_theme",
    colors = otherColors(...),
  )
}

For child components can correctly access defined AppTheme via MaterialTheme, wrap your child components in a ProvideAppMaterialTheme.

@Composable
fun App() {
  ProvideAppMaterialTheme(AppTheme) {
    // children
  }
}

Change Themes

You can retrieve current component tree’s ThemeController from ThemeControllerAmbient.

val themeController = ThemeControllerAmbient.current

To change current theme you can use the theme id strings.

themeController.setThemeId(ThemeIds.Default)
themeController.setThemeId("other_theme_id")

Access Current Theme Values

You can access current theme values via MaterialTheme object (from androidx.compose.material):

Surface(color = MaterialTheme.colors.primary) {
  // children
}

Check out JetTheme’s full documentation here.

Contributing

Feel free to open a issue or submit a pull request for any bugs/improvements.