Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Compose でデザインと実装の差異を減らすための取り組み

oidy
January 24, 2025

Compose でデザインと実装の差異を減らすための取り組み

2025/1/27 開催「Composeを用いたAndroidアプリ開発のハマりどころ」の登壇資料です。
https://newmo-tech.connpass.com/event/339846/

oidy

January 24, 2025
Tweet

More Decks by oidy

Other Decks in Programming

Transcript

  1. ©MIXI 3. UI 6 @Composable fun UserIcon( uiState: UserScreenUiState )

    @Composable fun PostButton( viewModel: PostScreenViewModel )
  2. ©MIXI 5. padding 8 16 - (48 - 18) /

    2 = 1 Material Design 48 x 48 dp
  3. ©MIXI • • View Compose • Figma 12 app app

    : https://speakerdeck.com/oidy/regasina-android-apurinoriakitekutiyazhan-lue
  4. ©MIXI 16 app Figma App Screen Screen A Screen B

    feature:b feature:a Library Components core:ui
  5. ©MIXI 19 Figma variables Kotlin internal val White = Color(0xFFFFFFFF)

    internal val Black = Color(0xFF1C1C1C) internal val lightColorScheme = lightColorScheme( surface = White, onSurface = Black, ) internal val darkColorScheme = darkColorScheme( surface = Black, onSurface = White, )
  6. ©MIXI 20 Kotlin internal val White = Color(0xFFFFFFFF) internal val

    Black = Color(0xFF1C1C1C) internal val lightColorScheme = lightColorScheme( surface = White, onSurface = Black, ) internal val darkColorScheme = darkColorScheme( surface = Black, onSurface = White, ) Material Color Scheme Color Scheme
  7. ©MIXI Color Scheme 21 internal data class MinimoColorScheme( val primaryVariant:

    Color, ) internal val lightMinimoColorScheme = MinimoColorScheme(BlueLight) internal val darkMinimoColorScheme = MinimoColorScheme(Blue) Material
  8. ©MIXI 22 internal val LocalMinimoColorScheme = staticCompositionLocalOf { lightMinimoColorScheme }

    CompositionLocal @Composable fun MinimoTheme(darkTheme: Boolean = isSystemInDarkTheme(), ...) { CompositionLocalProvider( LocalMinimoColorScheme provides if (darkTheme) { darkMinimoColorScheme } else { lightMinimoColorScheme }, ) { MaterialTheme(...) } } Theme
  9. ©MIXI 23 val ColorScheme.primaryVariant: Color @Composable @ReadOnlyComposable get() = LocalMinimoColorScheme.current.primaryVariant

    Extension Composable Text( text = text, color = MaterialTheme.colorScheme.primaryVariant, )
  10. ©MIXI 24 val ColorScheme.primaryVariant: Color @Composable @ReadOnlyComposable get() = LocalMinimoColorScheme.current.primaryVariant

    Extension Composable Text( text = text, color = MaterialTheme.colorScheme.primaryVariant, ) Theme
  11. ©MIXI Figma Code Connect Figma UI 2024 4 Compose, SwiftUI,

    React, HTML 31 @Composable fun Button(...) publish
  12. ©MIXI (2025 1 ) 32 Figma Code Connect Figma Dev

    Mode Relay Figma Organization or Enterprise Gradle Plugin & Library Figma Professional or Organization or Enterprise Figma Plugin Android Studio Plugin Ladybug Gradle Plugin Kotlin Plugin UI (JSON) Figma Figma Column, Row, Text build Composable
  13. ©MIXI UI 33 @FigmaConnect("https://www.figma.com/...") private class ButtonDoc { @FigmaProperty(FigmaType.Text, "text")

    private lateinit var text: String @FigmaProperty(FigmaType.Boolean, "enabled") private val enabled: Boolean = true @Composable private fun Example() { Button( onClick = {}, enabled = enabled, ) { Text(text = text) } } } URL Figma Property Boolean Text Enum Instance Compose Params Boolean String Enum Composable Figma
  14. ©MIXI UI 34 @FigmaConnect("https://www.figma.com/...") private class ButtonDoc { @FigmaProperty(FigmaType.Text, "text")

    private lateinit var text: String @FigmaProperty(FigmaType.Boolean, "enabled") private val enabled: Boolean = true @Composable private fun Example() { Button( onClick = {}, enabled = enabled, ) { Text(text = text) } } }
  15. ©MIXI UI 35 @FigmaConnect("https://www.figma.com/...") private class ButtonDoc { @FigmaProperty(FigmaType.Text, "text")

    private lateinit var text: String @FigmaProperty(FigmaType.Boolean, "enabled") private val enabled: Boolean = true @Composable private fun Example() { Button( onClick = {}, enabled = enabled, ) { Text(text = text) } } }
  16. ©MIXI : 36 @FigmaConnect(...) private class ButtonDoc { ... @Composable

    private fun Example() { if (enabled) { Button( onClick = {}, ) ... } else { Button( onClick = {}, enabled = enabled, ) ... } } }
  17. ©MIXI : Variant SwiftUI Code Connect hideDefault Compose 37 @FigmaConnect(...)

    @FigmaVariant("enabled", "false") private class DisabledButtonDoc { ... @Composable private fun Example() { Button( onClick = {}, enabled = false, ) ... } } @FigmaConnect(...) private class ButtonDoc { ... @Composable private fun Example() { Button( onClick = {}, ) ... } } enabled false
  18. ©MIXI : 40 @FigmaProperty(FigmaType.Text, "price") private val price: Int =

    0 ReservationHistoryMenu( ... price = "¥4,000", ) Int ( ) ReservationHistoryMenu( ... price = 4000, )
  19. ©MIXI 42 minimo 3 2 1 Figma Figma Code Connect

    Figma : file, section, variable, component, property Compose : module, package, theme, composable, parameter Figma Figma UI