月刊Androidニュース 2022年10月号(プロトタイプ)
How To Handle ViewModel One-Time Events In Jetpack Compose
- 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
Flowでリトライ処理をするためのオペレーター(retry,retryWhen)について紹介した記事
Jetpack Compose Clean Navigation
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
ボタンをタップしたときのアニメーション実装例を5種類紹介している
- パルス
- プレス
- シェイク
- シェイプの変更
- 無効のときの効果x3
Introducing KMMBridge for Teams
KMMを導入する際にネックになるのはiOSエンジニアがKotlinをかかなければいけないのかということである。
KMMで作ったロジックがXcode Frameworkとして公開されていれば、iOS側はそのSDKを利用することだけ考えればよくなる(記事の中ではInternal SDK Flow Approachと呼ばれている)。
KMMBridgeはKMMプロジェクトからKMM Xcode Frameworkを事前ビルドし、公開するまでを手助けしてくれるツール郡である。
記事ではKMMBridgeを作った経緯とKMMBridgeを使った際の開発フローが説明されている。
Callback to Coroutines in Kotlin
コールバックスタイルのサードパーティライブラリをコルーチンスタイルにするためのやりかたを紹介している。
結論:suspendCoroutine/suspendCancellableCoroutineでラップすればよい
You might be creating your states wrong! — Jetpack Compose
Jetpack Composeで状態の定義の仕方によって発生した問題について紹介した記事
筆者はDestructuringによる状態の取得と更新を好んでいるようだが、更新を連続して行ったときに更新されないという問題に直面したようである。
Destructuring/Delegateのどちらで状態を作るべきか考えされられる記事だった。
Gestures in Jetpack Compose: Getting Started
いろんなジェスチャーについて実装例を示してくれている
- single tap
- double taps
- scrolling
- swipe to dismiss
NEW OPERATOR in Kotlin (and true open-ended ranges)
0..10
として0から10までのRangeをつくれたけど、
新たに 0..<10
とすることで0から9までのRangeをつくれるようになった
Comparableなオブジェクトであれば利用可能なので、いろんな使い方ができそう
Collection processing in Kotlin: Grouping elements
.partition
、.groupBy
について紹介した記事
.partition
:条件を見たす集合と補集合に分けてくれる
.groupBy
:要素の特徴(先頭の文字列、プロパティ...)を使って複雑なグルーピングができる
News Source
- androidweekly.net/issues/issue-539
- androidweekly.net/issues/issue 540
- androidweekly.net/issues/issue 541
- androidweekly.net/issues/issue 542
- Kotlin Weekly #323
- Kotlin Weekly #324
- Kotlin Weekly #325
- Kotlin Weekly #326
- Android Stack Weekly — Issue #41
- Android Stack Weekly — Issue #42
- Android Stack Weekly — Issue #43
- Android Stack Weekly — Issue #44
Discussion