KMP+LandscapistImageでWebの画像取得ロジックを共通化するシンプルなチュートリアル

概要

KMP(Kotlin Multiplatform)で、Webの画像を表示する手順です。
各プラットフォームの共通UIで実装するために、LandscapistImageを使います。
AndroidとiOS向けでサンプルアプリを作成します。

KMPの詳細はこちらの記事もご覧ください。

LandscapistImageの特徴

公式サイト
https://github.com/skydoves/landscapist

landscapist-imageライブラリで使える関数です。
Coilが基盤のlandscapist-coil3ライブラリで使える、CoilImage関数もあります。

どちらもKMPをサポートしているため、各プラットフォームごとに画像取得ロジックを分ける必要がありません。
公式サイトによると、LandscapistImageはCoilImageよりもパフォーマンスが良いです。

Web API経由で取得したリンクを利用して画像を表示する時などに使います。

手順

  1. Kotlin Multiplatform Wizardから雛形プロジェクトを取得する
  2. landscapist-imageをインポートする
  3. 共通UIで実装されているImageを、LandscapistImageに書き換える
  4. 各プラットフォームで画像表示を確認する

1.Kotlin Multiplatform Wizardから雛形プロジェクトを取得する

以下のサイトにアクセスします。
https://kmp.jetbrains.com/?android=true&ios=true&iosui=compose&includeTests=false

AndroidとiOSにチェックを入れて、DOWNLOADボタンを押します。
画像

2.landscapist-imageをインポートする

ダウンロードしたプロジェクトを解凍して、AndroidStudioで開きます。
commonMain.dependenciesにlandscapist-imageを追加します。
最新のバージョンは公式ドキュメントから確認できます。

build.gradle.kts
commonMain.dependencies {
    
    // ....
    
    implementation("com.github.skydoves:landscapist-image:2.8.2")
}

3.共通UIで実装されているImageを、LandscapistImageに書き換える

composeApp/src/commonMain/kotlin/org/example/project/App.ktを変更します。

App.kt変更前

アプリ.kt
Image(painterResource(Res.drawable.compose_multiplatform), null)

App.kt変更後

Lorem Picsumの画像を使用しました。

アプリ.kt
LandscapistImage(
    imageModel = { "https://picsum.photos/id/237/900/900" },
)

4.各プラットフォームで画像表示を確認する

Androidの実行結果

image

iOSの実行結果

image

--------------------------
開発支援・技術研修のご要望・ご相談はこちらから
--------------------------
【この技術ブログを読んだエンジニアの皆様へ】
カサレアルブログをお読みいただき、ありがとうございます!

私たちは、常に新しい技術に挑戦し、ユーザーのニーズに応えるサービスを提供しています。
もし、当社の技術への情熱や、会社・チーム・社員の雰囲気に共感いただけたなら、
ぜひ私たちと一緒に働きませんか?
現在、株式会社カサレアルでは事業拡大に伴い、新たな仲間となるエンジニアを積極的に募集しています。

少しでも興味をお持ちいただけましたら、まずは弊社のことを知っていただけると嬉しいです。
▼採用サイト
https://www.casareal.co.jp/recruit/career
▼社員インタビュー
https://hrmos.co/pages/casareal/jobs/0000016
▼エンジニアの仲間になる! エントリーはこちらから
https://hrmos.co/pages/casareal/jobs

皆様のエントリーを心よりお待ちしています!

プロジェクト参画から3か月が経過して

コメントを残す

メールアドレスが公開されることはありません。 ※ が付いている欄は必須項目です

コメント ※

名前 ※

メール ※

サイト