【Compose Multiplatform 】跨平台App但Android需要context作法並搭配Koin

前言

在開發 Compose Multiplatform 專案時
我們需要處理平台特定的問題
其中會遇到一個問題是
Android 平台需要 Context 而 iOS 不需要
本文將介紹如何在使用 Koin 進行依賴注入時
成功的解決這個問題

實作方法
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 策略

You might also enjoy