多忙により寝かされてしまったため、ここで供養します。夏コミ(C102)は別の記事を書く予定です。Multiplatformが発表されました。Desktopを使うことでAndroidとDesktopでUIコードを共通化することができました。Multiplatformではこれに加えiOSとWebもサポートしています。2023年5月時点ではiOSはAlpha版、WebはExperimental版です。Multiplatformで共通化したときに、画像をネットワークから非同期に読み込む方法を紹介します。ここで紹介する方法は2023年5月時点のものであり、今後APIが変わる可能性が大いにあります。MultiplatformにはResourceというinterfaceが用意されています。Resourceにはsuspend関数のreadBytes()が定義されており、戻り値はByteArrayです。このResourceを実装したLoadImageResourceを用意します。LoadImageResourceのreadBytes()では指定されたURLからByteArrayを取得する処理を実装します。LoadImageResourceではKtor(https://ktor.io/)を使っています。}rememberImageBitmapResourceの拡張関数としてrememberImageBitmap()が用意されています。rememberImageBitmap()はComposable関数で、戻り値はLoadState<ImageBitmap>です。LaunchedEffectのなかでResourceのreadBytes()を呼び出し、返ってきたByteArrayをtoImageBitmap()でImageBitmapに変換しています。classでLoading、Success、Errorの3つのサブクラスがあります。LoadStateに応じてComposableを表示します。LoadState.SuccessのvalueプロパティからImageBitmapを取得し、BitmapPainterでPainterを作ります。composableにセットすることで画像が表示されます。MultiplatformのAndroid、iOS両方でネットワークから読み込んだ画像が表示されます。実際のアプリで使うにはキャッシュ機能などが必要になりますし、そのうちライブラリもでてくるでしょう。Multiplatformぜひ試してみてください。アプリつくったり、本書いたり、講演したりしてます。