【Compose Multiplatform】KoinでAndroidのContextを扱うクロスプラットフォームアプリの実装
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のモジュールリストに挿入します
iOS:
使用方法
commonMainでkoinViewModelを使用して注入されたViewModel:
またはモジュールでget()
を使用して必要なインスタンスを生成することもできます
まとめ
- expectとactualキーワードを使用することでプラットフォームの違いを処理できます
- KoinはCompose Multiplatformで依存性注入のサポートを提供します
- Contextを適切に処理することで、クロスプラットフォームコードがより明確で保守しやすくなります
- この方法は他のプラットフォーム固有の依存性注入シナリオにも適用できます
- 実際の開発では、自分のニーズに応じて柔軟にDI戦略を調整できます