Android 用Jektpack Compose 來開発app【04】 - Compose画面篇
2024, May 28
前言
- これはこのシリーズの第四篇です
この段階では基本的に
UI/UXデザインの画面を描くことが多くなります
皆さんはコードを書くことに集中できます
プロジェクト構築
- 使用するライブラリは以下の通りです:
Function
Lib
build
gradle.kts + toml
api
okhttp + retrofit2
navigation
navigation-compose
design
material 3
di
hilt
ui
jetpack compose
json
kotlinx.serialization
db
room
共通の画面を描く心得共有
-
異なるUI/UXと協力した後
多くのデザイン画面が現在のプロジェクトに共通のコンポーネントを持っていることに気づきました
もしプロジェクト全体で共通のコンポーネントがある場合
それを取り出して共通のComposeにすることができます
(主にデザイナーとのコミュニケーション次第です) -
よく使われるedittext、dialog、カスタマイズされたコンポーネントなど
以下にいくつか共通コンポーネントとして作成できるComposeを共有します
皆さんは自分のニーズに応じて実装してください
Edittext
Dialog
Dialog
必要な画面を組み立てる
- 次に、さまざまな画面を組み立てることができます
後の新しい要求が同じデザインである場合
前に苦労して分けて描いた画面を簡単に組み立てることができます
以下は、前の初期構築篇で共有した共通のツールバーと
上記で共有したComposeを使用した例です
flowを通じて画面更新に対応する
flowを作成する
- 現在のアプリ機能はますます多くなっています
そのため、値の取得元や要求も増えています
ある機能が複数の画面の変化を処理するように要求された場合
その値の取得元が異なる場合
私はflowを使用して各コルーチンの戻り値を処理します
ソースデータのreturnや型をすべてflowにします
データソースのアクセス速度を制御できない場合もあります
例えば、ネットワークリクエストやローカルDBの大量データのクエリ時など
そのため、flowを使用してデータがemitされるのを待つことができます
ここで少し例を挙げます:
画面の応答に必要なデータを保存するためのviewstateを作成する
- 次に、画面上で変化するすべての内容を整理するために
データクラスを作成して、画面に必要なデータを保存します
combineを使ってflowを組み合わせる
- 次に、
combine
を使用してさまざまなデータソースを組み合わせます
combineはすべてのflowを組み合わせ
最近emitされた値を組み合わせます
その実装の原理は、関数型またはラムダ関数を使用することです
指定した型のflowを返します
- ラムダ
{}
内で判定したい値がある場合も考慮できます
最終的に、前に定義したViewStateを使って結果を返すだけです
.stateIn
は、このR型flowの初期値を設定できます
実際にcomposeでflowからのデータを使用する
- 前の手順が完了したら、
.collectAsState()
を使用して前のflowを取得し
composeで使用できるstateに収集します
この時点で画面をリアクティブに更新できます~