Slide 1

Slide 1 text

Android Ͱ Multiplatform Settings Λ࢖͏ 2021.9.10 YUMEMI.apk #5 Hiroyuki Kusu ( @hkusu_ )

Slide 2

Slide 2 text

About me 

Slide 3

Slide 3 text

ΈΜͳ͕஌ͬͯΔ͋ͷαʔϏεɺ ࣮͸ΏΊΈ͕࡞ͬͯ·͢ɻ શੈք5000ສMAUʹୡ͢ΔωοταʔϏεΛΦʔμʔϝΠυͰاըઃܭ͠ɺ γεςϜߏஙӡ༻͔ΒվળఏҊ·Ͱαϙʔτ͍͖ͯ͠·͢ɻ 

Slide 4

Slide 4 text

 Multiplatform Settings https://github.com/russhwolf/multiplatform-settings • key-value σʔλӬଓԽͷҝͷ Kotlin Multiplatform ϥΠϒϥϦ • Android ͷ৔߹͸ SharedPreferences ͕಺෦తʹར༻͞ΕΔ

Slide 5

Slide 5 text

Kotlin Multiplatform ϓϩδΣΫτͰ ͳͯ͘΋௨ৗͷ Android ͷϓϩδΣΫτ Ͱ΋ར༻Ͱ͖ΔͷͰར༻ͯ͠ΈΔ  ຊ೔ͷ࿩୊

Slide 6

Slide 6 text

 implementation("com.russhwolf:multiplatform-settings:0.7.4" ) implementation("com.russhwolf:multiplatform-settings-coroutines:0.7.4") build.gradle.kts ಋೖ ※ ݱ࣌఺ͷ࠷৽όʔδϣϯ͸ 0.8 ͷΑ͏Ͱ͢ Coroutines ༻ͷ֦ு

Slide 7

Slide 7 text

 val context: Context = .. . val sharedPreferences: SharedPreferences = context.getSharedPreferences("main", Context.MODE_PRIVATE ) val flowSettings: FlowSettings = AndroidSettings(sharedPreferences, commit = true).toFlowSettings() FlowSettings Πϯελϯεͷ࡞੒

Slide 8

Slide 8 text

 @ExperimentalSettingsAp i class AccountDao(private val settings: FlowSettings) { val nameFlow: Flow = settings.getStringOrNullFlow(KEY_NAME ) suspend fun getName(): String? { return settings.getStringOrNull(KEY_NAME ) } suspend fun setName(name: String) { settings.putString(KEY_NAME, name ) } companion object { private const val KEY_NAME = "name " } } Dao Ϋϥεͷ༻ҙ FlowSettings ΠϯελϯεΛͦͷ··ར༻ͯ͠΋Α͍͕ɺςετ࣌ʹϞοΫ͍ͨ͠ͷͰϥούʔΫϥεΛ༻ҙ ʢkey Λར༻ऀ͔ΒӅṭͨ͠Γɺૢ࡞Λந৅Խ͢Δ౳ͷ໨త΋͋Δʣ

Slide 9

Slide 9 text

 @ExperimentalSettingsAp i class AccountDao(private val settings: FlowSettings) { val nameFlow: Flow = settings.getStringOrNullFlow(KEY_NAME ) suspend fun getName(): String? { return settings.getStringOrNull(KEY_NAME ) } suspend fun setName(name: String) { settings.putString(KEY_NAME, name ) } companion object { private const val KEY_NAME = "name " } } DaoΫϥεͷ༻ҙ Suspending Function ͰಡΈॻ͖

Slide 10

Slide 10 text

 @ExperimentalSettingsAp i class AccountDao(private val settings: FlowSettings) { val nameFlow: Flow = settings.getStringOrNullFlow(KEY_NAME ) suspend fun getName(): String? { return settings.getStringOrNull(KEY_NAME ) } suspend fun setName(name: String) { settings.putString(KEY_NAME, name ) } companion object { private const val KEY_NAME = "name " } } DaoΫϥεͷ༻ҙ σʔλʹมߋΠϕϯτΛྲྀ͢ Flow

Slide 11

Slide 11 text

 val context: Context = .. . val sharedPreferences: SharedPreferences = context.getSharedPreferences("main", Context.MODE_PRIVATE ) val flowSettings: FlowSettings = AndroidSettings(sharedPreferences, commit = true).toFlowSettings() FlowSettings Πϯελϯεͷ࡞੒ʢ࠶ܝʣ SharedPreferences ΁ͷσʔλอଘͰ͸ commitʢಉظʣͱ applyʢඇಉظʣͷ2ܗ͕ࣜ͋Δ͕ɺCoroutines Խ ͨ͜͠ͱʹΑΓ commit ͷσϝϦοτʢεϨουͷϒϩοΫʣ͕ബ·͍ͬͯΔͷͰ commit Λ࠾༻ 㱺 Coroutines ͷ࢓૊Έʹ৐Δ͜ͱͰɺ࣮ߦॱ΍εϨουΛؾʹͤͣσʔλͷಡΈॻ͖͕Մೳʹ

Slide 12

Slide 12 text

 • Multiplatform ϥΠϒϥϦͰ͋Δ͕ Android ୯ମͰར༻ͯ͠ ΋ศར • ଞʹ΋ศརͦ͏ͳ Multiplatform ϥΠϒϥϦ͕͋ΔͷͰಋೖΛ ݕ౼ͯ͠΋Α͍͔΋ʁ • Retro fi t ͷସΘΓʹ Ktor • Room ͷସΘΓʹ SQLDelight ͳͲͳͲ.. ͓ΘΓʹ

Slide 13

Slide 13 text

Thank you ! @hkusu_ ฐࣾ͸ Android ΤϯδχΞ ઈࢍืूத Ͱ͢ʂ