Slide 1

Slide 1 text

2023.12.09 Flutter×Jetpack Compose ૬ޓӡ༻ YUMEMI Inc. Flutter Engineer - Onoue Ryotaro @YumNumm (΋͙΋͙) GDG DevFest Tokyo 2023 LT

Slide 2

Slide 2 text

0. whoami - 2023೥4݄͔Β גࣜձࣾΏΊΈͰFlutter ΤϯδχΞͱͯ͠ۈ຿ - 2023೥11݄ͷFlutterKaigi 2023Ͱ͸ɺ ྛ͞Μͱొஃ

Slide 3

Slide 3 text

0. whoami - ஍਒ؔ࿈ͷFlutter੡ΞϓϦέʔγϣϯΛ ݸਓ։ൃ͍ͯ͠·͢ - AppStoreʹͯެ։ࡁΈ/PlayετΞ৹ࠪ଴ ͪ - HPɿhttps: / / eqmonitor.app - ΦʔϓϯιʔεͰ͢ - https: / / github.com/YumNumm/ EQMonitor

Slide 4

Slide 4 text

1. Today’s topic Flutter × Jetpack Compose

Slide 5

Slide 5 text

Android Platform Views 1. FlutterͰAndroidͷࢿ࢈Λར༻͢Δख๏ - ݱঢ়ͷFlutterͰ͸ඳը͕ࠔ೉ͳػೳΛ࣮૷͢Δͷʹར༻ - Ex. WebView, ஍ਤ, ө૾࠶ੜ - 3ͭͷΞϓϩʔν - Virtual Display (VD) - Hybrid Composition (HC) - Texture Hybrid Composition (TLHC) https: // github.com/flutter/flutter/wiki/Android-Platform-Views

Slide 6

Slide 6 text

Virtual Display OR Hybrid Composition OR Texture Layer Hybrid Composition 1. FlutterͰAndroidͷࢿ࢈Λར༻͢Δख๏ - Ծ૝σΟεϓϨΠ (Virtual Display - VD) - Android SDK 20+ - ωΠςΟϒཁૉΛVirtual Display΁ϨϯμϦϯά - > όοϑΝ͔Βग़ྗΛऔಘ - > Flutterͷ΢ΟδΣοτπϦʔ্ʹςΫενϟͱͯ͠ѻ͏ - > Android্ͰςΫε νϟͱͯ͠શମΛग़ྗ - 👍 - ύϑΥʔϚϯε͕ྑ͍ - 👎 - ΞΫηγϏϦςΟͷܽଛɾΩʔϘʔυपΓͷ੍໿ https: // github.com/flutter/flutter/wiki/Virtual-Display

Slide 7

Slide 7 text

Virtual Display OR Hybrid Composition OR Texture Layer Hybrid Composition 1. FlutterͰAndroidͷࢿ࢈Λར༻͢Δख๏ - Hybrid Composition (HC) - Android SDK 19+ - Flutter 1.20+ - ΢ΟδΣοτπϦʔΛ2෼ׂ (PlatformViewͷ্ɾԼ)ͯ͠ඳը → ϓϥοτϑΥʔϜଆͰ߹ ੒ - 👍 - ωΠςΟϒͷը໘͕ͦͷ··ඳը͞ΕΔͷͰɺΞΫηγϏϦςΟɾΩʔϘʔυपΓͷ໰୊͸΄ ͱΜͲղܾ (VDͷ՝୊͸ղܾ) - 👎 - ύϑΥʔϚϯε͕ѱ͍ - Android 10ະຬͰ͸ߋʹύϑΥʔϚϯε͕ѱ͍ https: // github.com/flutter/flutter/wiki/Hybrid-Composition#Android

Slide 8

Slide 8 text

Virtual Display OR Hybrid Composition OR Texture Layer Hybrid Composition 1-1. FlutterͰAndroidͷࢿ࢈Λར༻͢Δख๏ - Hybrid Composition (HC) - API 19+ - Flutter 1.20+ - ΢ΟδΣοτπϦʔΛ2෼ׂ (PlatformViewͷ্ɾԼ)ͯ͠ඳը → ϓϥοτϑΥʔϜଆͰ߹ ੒ - 👍 - ωΠςΟϒͷը໘͕ͦͷ··ඳը͞ΕΔͷͰɺΞΫηγϏϦςΟɾΩʔϘʔυपΓͷ໰୊͸΄ ͱΜͲղܾ (VDͷ՝୊͸ղܾ) - 👎 - ύϑΥʔϚϯε͕ѱ͍ - Android 10ະຬͰ͸ߋʹύϑΥʔϚϯε͕ѱ͍ - Voice PocochaͷΤϑΣΫτදࣔύϑΥʔϚϯε (Android 8) - VD: avg. 13.5 ms/frame - HC: avg. 43.0 ms/frame 3ഒఔ౓ͷࠩ! ը૾ɾ಺༰IUUQTFOHJOFFSJOHEFOBDPNCMPHWPJDFQPDPDIBPOFZFBS fl VUUFSΑΓҾ༻

Slide 9

Slide 9 text

Virtual Display OR Hybrid Composition OR Texture Layer Hybrid Composition 1. FlutterͰAndroidͷࢿ࢈Λར༻͢Δख๏ - Texture Layer Hybrid Composition (TLHC) - Android SDK 23+ - Flutter 3.0+ - VDͱHCͷஔ͖׵͑໨తͷ΋ͷ - > ੍ݶ͕͋ͬͨͷͰ 3ͭΊͷબ୒ࢶʹ - TLHCΛڧ੍͢ΔAPI΋͋Δ͕ɺجຊతʹTLHC - > ࣗಈͰHC΁ϑΥʔϧόοΫ͢ΔAPI͕ੜ͑ͯΔ - 👍 - VD, HCͷ͍͍ͱ͜औΓ - 👎 - Android SDK 23+ - ը໘ߋ৽࣌ʹඞͣΞοϓσʔτ͞ΕΔ͜ͱ͕อূ͞Ε͍ͯͳ͍ (ௐࠪத) https: // github.com/flutter/flutter/wiki/Texture-Layer-Hybrid-Composition

Slide 10

Slide 10 text

Android Platform Views 1-1. FlutterͰAndroidͷࢿ࢈Λར༻͢Δख๏ - ݱঢ়ͷFlutterͰ͸ඳը͕ࠔ೉ͳػೳΛ࣮૷͢Δͷʹར༻ - Ex. WebView, ஍ਤ, ө૾࠶ੜ - 3ͭͷΞϓϩʔν - Virtual Display (VD) - Hybrid Composition (HC) - Texture Hybrid Composition (TLHC) https: // github.com/flutter/flutter/wiki/Android-Platform-Views - Hybrid Composition (HC) - Texture Hybrid Composition (TLHC)

Slide 11

Slide 11 text

Jetpack ComposeΛࢼ͢ 1. Androidͷࢿ࢈ . . . ? - Android View (XML Layout) - XMLͰUIΛهड़ ɾ ྑ͘΋ѱ͘΋ϨΨγʔͳٕज़ ɾ ໋ྩత - Jetpack Compose - KotlinͰUIͱϩδοΫΛهड़ ɾ એݴతUI https: // github.com/flutter/flutter/wiki/Texture-Layer-Hybrid-Composition

Slide 12

Slide 12 text

Jetpack ComposeΛࢼ͢ 1. Androidͷࢿ࢈ . . . ? - Android View (XML Layout) - XMLͰUIΛهड़ ɾ ྑ͘΋ѱ͘΋ϨΨγʔͳٕज़ ɾ ໋ྩత - Jetpack Compose - KotlinͰUIͱϩδοΫΛهड़ ɾ એݴతUI https: // github.com/flutter/flutter/wiki/Texture-Layer-Hybrid-Composition - FlutterͷPlatformViewͰ Android View Λ࢖͏ ← ࢁ΄Ͳग़ͯ͘Δ - FlutterͷPlatformViewͰ Jetpack ComposeΛ࢖͏ ← ͋·Γग़ͯ͜ͳ͍ (Android͋·Γৄ͘͠ͳ͍͚Ͳ) ΍ͬͯΈΔ͔͠!

Slide 13

Slide 13 text

2. ·ͣ͸૊ΜͰΈΔ Flutter × Jetpack Compose

Slide 14

Slide 14 text

2. Կ࡞Δͷ? Flutterͱ͍͑͹ . ..

Slide 15

Slide 15 text

2. Կ࡞Δͷ? Flutterͱ͍͑͹ . .. - flutter create ͨ࣌͠ʹͰ͖ΔΧ΢ϯλʔΞϓϦ

Slide 16

Slide 16 text

2. Կ࡞Δͷ? Flutterͱ͍͑͹ . .. - flutter create ͨ࣌͠ʹͰ͖ΔΧ΢ϯλʔΞϓϦ - Χ΢ϯλʔදࣔ෦෼ΛωΠςΟϒͱ࿈ಈ - ্൒෼: Jetpack ComposeͰදࣔ - Լ൒෼: FlutterͰදࣔ

Slide 17

Slide 17 text

Կ࡞Δͷ? Flutterͱ͍͑͹ . .. - flutter create ͨ࣌͠ʹͰ͖ΔΧ΢ϯλʔΞϓϦ - Χ΢ϯλʔදࣔ෦෼ΛωΠςΟϒ - FloatingActionButton, AppBar͸Flutter - FABλοϓ࣌ʹωΠςΟϒଆ΁ λοϓͨ͜͠ͱΛ௨஌ - ωΠςΟϒͰอ͍࣋ͯ͠ΔΧ΢ϯλʔΛΠϯΫϦϝϯτ͠දࣔ https: // docs.flutter.dev/platform-integration/android/platform-views

Slide 18

Slide 18 text

2. ࣮૷! PlatformView - viewΛࣝผ͢ΔͨΊͷจࣈ ྻΛviewType΁ηοτ - PlatformViewsService.ini tSurfaceAndroidView API Λ࢖͏ - TLHC ͳ͍͠͸ HC Flutter side

Slide 19

Slide 19 text

2. ࣮૷! Jetpack ComposeΛ৮Δ४උ Android side https: // developer.android.com/jetpack/compose/setup?hl=ja#setup-compose

Slide 20

Slide 20 text

2. ࣮૷! Jetpack ComposeΛ৮Δ४උ Android side https: // developer.android.com/jetpack/compose/setup?hl=ja#setup-compose - android/build.gradle, android/app/build.gradle ΁ґଘͷ ௥Ճ

Slide 21

Slide 21 text

2. ࣮૷! FlutterͱAndroidଆͷௐ੔ Android side MainActivity಺ͰɺMethodChannelΛΠϯελϯεԽ PlatformViewFactoryΛొ࿥

Slide 22

Slide 22 text

2. ࣮૷! FlutterͱAndroidଆͷௐ੔ Android side ViewFactoryͷcreateؔ਺ΛΦʔόʔϥΠυͯ͠ MyComposeView: PlatformViewΛฦ͢

Slide 23

Slide 23 text

2. ࣮૷! FlutterͱAndroidଆͷௐ੔ Android side MyComposeViewͰ͸ ComposeViewΛׂΓ ౰ͯ - > ComposeViewʹCounterAppΛηοτ

Slide 24

Slide 24 text

2. ࣮૷! Jetpack ComposeͰը໘࡞੒ Android side Composableؔ਺Λ༻ҙͯ͋͛͠Δ ScaffoldͰViewΛߏங͢Δ Column{ Text(), Text() }ͰTextΛॎʹฒ ΂Δ

Slide 25

Slide 25 text

2. ࣮૷! Jetpack ComposeΛ৮Δ४උ Android side Composableؔ਺Λ༻ҙͯ͋͛͠Δ ScaffoldͰViewΛߏங͢Δ Column{ Text(), Text() }ͰTextΛॎʹฒ ΂Δ ॳճίϯϙδγϣϯͰ MethodChannelͷhandlerొ࿥ “Increment”͕ୟ͔Εͨ࣌ʹɺΧ΢ϯλʔΠϯΫϦϝϯτ

Slide 26

Slide 26 text

2. ࣮૷! Jetpack ComposeΛ৮Δ४උ Android side Composableؔ਺Λ༻ҙͯ͋͛͠Δ ScaffoldͰViewΛߏங͢Δ Column{ Text(), Text() }ͰTextΛॎʹฒ ΂Δ Jetpack ComposeଆͷFAB͕ԡ͞Εͨ࣌ʹ͸ɺMethodChannelͰ Flutterଆ΁௨஌

Slide 27

Slide 27 text

2. ࣮૷! Jetpack ComposeΛ৮Δ४උ Android side

Slide 28

Slide 28 text

3. ·ͱΊ Flutter × Jetpack Compose

Slide 29

Slide 29 text

·ͱΊ Flutter × Jetpack Compose - Flutter͚ͩͰશͯͷ՝୊ΛղܾͰ͖ΔΘ͚Ͱ͸ͳ͍ - GLSLͰFragment ShaderʹΞΫηεͨ͠Γ Impeller Scene(experimental 3D renderer) ͕͋Δ͕ ΍͸Γ·ͩͰ͖ͳ͍͜ͱ͸ ࢁ΄Ͳ - ωΠςΟϒͷࢿ࢈Λ͋Γ͕ͨ͘ར༻͍͖ͤͯͨͩ͞·͠ΐ͏ - Flutter΋Jetpack Compose΋ ͲͪΒ΋એݴతUI - FlutterΤϯδχΞʹͱͬͯ ਌͠Έ΍͍͢👍 - - > ൺֱత͔ΜͨΜʹωΠςΟϒ࣮૷Ͱ͖Δ - ϓϥάΠϯ͕ແ͍αʔϏεɾෳ਺ͷࢿ࢈Λෳ߹తʹར༻͢Δ৔߹ʹ࢖͑Δ - Jetpack Compose΋ରԠ͍ͯ͠ͳ͍/BetaͳϥΠϒϥϦ΋͋ΔͷͰ஫ҙ

Slide 30

Slide 30 text

- https: / / github.com/YumNumm/flutter_compose_view ͝ਗ਼ௌ͋Γ͕ͱ͏͍͟͝·ͨ͠! Follow me on X: @YumNumm