📰

月刊Androidニュース 2022年10月号(プロトタイプ)

2022/11/03に公開

How To Handle ViewModel One-Time Events In Jetpack Compose

https://proandroiddev.com/how-to-handle-viewmodel-one-time-events-in-jetpack-compose-a01af0678b76

  • one-shot(one-off) eventを処理するためのcomposeライブラリ: compose-state-eventsの紹介記事
  • one-shot event→UIで一度だけ処理したいイベント。ex. APIレスポンスへの応答
  • LiveDataの時代はSingleLiveEventという実装を用いていた
  • Flow時代はSharedFlowを使っていた
  • RxだとEventBusに相当する?

Retry Operator in Kotlin Flow

https://amitshekhar.me/blog/retry-operator-in-kotlin-flow

Flowでリトライ処理をするためのオペレーター(retry,retryWhen)について紹介した記事

Jetpack Compose Clean Navigation

https://betterprogramming.pub/jetpack-compose-clean-navigation-94b386f7a076

Navigation Composeは公式の通りに導入するとルートが型安全でなかったり、Screen-Composableの呼び出しが複雑になる。
より簡潔に、高い拡張性をもって実装するための方法が紹介されている。

// before
NavHost(
 navController = navController,
 startDestination = "home"
) {
    composable(route = "home") {
        HomeScreen(
          navigatToUsersScreen = { navController.navigate("users") },
          navigatToMessagesScreen = { navController.navigate("messages") },
          navigatToDetailsScreen = { navController.navigate("details") }
        )
    }
    composable(route = "users") {
        UsersScreen(
          navigateBack = { navController.navigateUp() },
          navigatToUserDetailsScreen = { navController.navigate("user_details") }
        )
    }
    composable(route = "user_details") {
        UserDetailsScreen(
          navigateBack = { navController.navigateUp() }
        )
    }
    composable(route = "messages") {
        MessagesScreen(
          navigateBack = { navController.navigateUp() }
        )
    }
    composable(route = "details") {
        DetailsScreen(
          navigateBack = { navController.navigateUp() }
        )
    }
}
// after
NavHost(
    navController = navController,
    startDestination = Destination.HomeScreen
) {
    composable(destination = Destination.HomeScreen) {
        HomeScreen()
    }
    composable(destination = Destination.UsersScreen) {
        UsersScreen()
    }
    composable(destination = Destination.UserDetailsScreen) {
        UserDetailsScreen()
    }
    composable(destination = Destination.MessagesScreen) {
        MessagesScreen()
    }
    composable(destination = Destination.DetailsScreen) {
        DetailsScreen()
    }
}

Jetpack compose: Cool Button Click Effects

https://blog.canopas.com/jetpack-compose-cool-button-click-effects-c6bbecec7bcb

ボタンをタップしたときのアニメーション実装例を5種類紹介している

  1. パルス
  2. プレス
  3. シェイク
  4. シェイプの変更
  5. 無効のときの効果x3

Introducing KMMBridge for Teams

https://medium.com/@kpgalligan/introducing-kmmbridge-for-teams-da825da42e81

KMMを導入する際にネックになるのはiOSエンジニアがKotlinをかかなければいけないのかということである。
KMMで作ったロジックがXcode Frameworkとして公開されていれば、iOS側はそのSDKを利用することだけ考えればよくなる(記事の中ではInternal SDK Flow Approachと呼ばれている)。
KMMBridgeはKMMプロジェクトからKMM Xcode Frameworkを事前ビルドし、公開するまでを手助けしてくれるツール郡である。
記事ではKMMBridgeを作った経緯とKMMBridgeを使った際の開発フローが説明されている。

Callback to Coroutines in Kotlin

https://amitshekhar.me/blog/callback-to-coroutines-in-kotlin
https://www.youtube.com/watch?v=rjOfYmNbwIY

コールバックスタイルのサードパーティライブラリをコルーチンスタイルにするためのやりかたを紹介している。
結論:suspendCoroutine/suspendCancellableCoroutineでラップすればよい

You might be creating your states wrong! — Jetpack Compose

https://proandroiddev.com/you-might-be-creating-your-states-wrong-jetpack-compose-b8b1aff1bcd8

Jetpack Composeで状態の定義の仕方によって発生した問題について紹介した記事
筆者はDestructuringによる状態の取得と更新を好んでいるようだが、更新を連続して行ったときに更新されないという問題に直面したようである。
Destructuring/Delegateのどちらで状態を作るべきか考えされられる記事だった。

Gestures in Jetpack Compose: Getting Started

https://www.kodeco.com/34465692-gestures-in-jetpack-compose-getting-started

いろんなジェスチャーについて実装例を示してくれている

  1. single tap
  2. double taps
  3. scrolling
  4. swipe to dismiss

NEW OPERATOR in Kotlin (and true open-ended ranges)

https://www.youtube.com/watch?v=v0AHdAIBnbs

0..10 として0から10までのRangeをつくれたけど、
新たに 0..<10 とすることで0から9までのRangeをつくれるようになった
Comparableなオブジェクトであれば利用可能なので、いろんな使い方ができそう

Collection processing in Kotlin: Grouping elements

https://kt.academy/article/fk-cp-grouping

.partition.groupByについて紹介した記事
.partition:条件を見たす集合と補集合に分けてくれる
.groupBy:要素の特徴(先頭の文字列、プロパティ...)を使って複雑なグルーピングができる

News Source

GitHubで編集を提案

Discussion