【Compose Multiplatform 】跨平台App但Android需要context作法並搭配Koin
2024, Jul 10
前言
在開發 Compose Multiplatform 專案時
我們需要處理平台特定的問題
其中會遇到一個問題是
Android 平台需要 Context 而 iOS 不需要
本文將介紹如何在使用 Koin 進行依賴注入時
成功的解決這個問題
目錄
- 【Compose Multiplatform】專案轉移探討與開發指南
- 【Compose Multiplatform】手機使用依賴注入Koin
- 【Compose Multiplatform 】跨平台App但Android需要context作法並搭配Koin
- 【Compose Multiplatform】手機本地持久化儲存DataStore實作
- 【Compose Multiplatform】手機資料庫SqlDelight實作
- 【Compose Multiplatform】CMP中使用ROOM開發資料庫 - [KSP2] Annotation value is missing in nested annotations
- 【Compose Multiplatform】CMP專案中導入CocoaPods及無CocoaPods情況下使用IOS Swift/Obj-C
實作方法
1. 使用 expect 和 actual 關鍵字
首先
我們需要使用 CMP 的 expect 和 actual 關鍵字來為不同平台提供不同的實現
這邊先在commonMain建立expect
我這個例子是因為SettingDataStore需要context
而LearningViewModel需要SettingDataStore
所以建立一個expect platformModule的變數
2. 在 Android 平台實現
在 Android 平台中,我們需要實現platformModule
那我預期dataStore需要拿到個context:
3. 在 iOS 平台實現
在 iOS 平台中,我們不需要 Context
所以直接實作就可以
4. 初始化 Koin
在各平台的啟動點初始化 Koin:
Android
在Android的啟動點去取得context
並塞進startKoin的module list裡面
iOS:
使用方法
在 commonMain 中使用koinViewModel注入的 ViewModel:
或是在module就把需要的instance用get()
去幫你產生也可以
總結
- 使用 expect 和 actual 關鍵字可以處理平台差異
- Koin 在 Compose Multiplatform 中提供了 DI 支持
- 正確處理 Context 可以讓跨平台代碼更加清晰和可維護
- 這種方法可以應用於其他平台特定的依賴注入場景
- 在實際開發中,可再根據大家自己的需求靈活調整 DI 策略