1
/
5

JetpackCompose日記(最近よく使っている構成)【株式会社ライトコード】

はじめに

しばらくJetpackComposeの実装経験を積んできたことで。
ある程度構成が固まってきたので備忘録程度の記事にします。
とはいえ、常に流行りは変化しているので、私の構成も数カ月後には変わっているかも。

最近よく使っている構成

  • 1画面1Activity(画面遷移はActivityの遷移で実現)
  • Fragmentは使わない
  • DIはHiltを使う

と、まぁ・・・まだActivityによる遷移を捨てきれていないエンジニアです。
AndroidViewとComposeが共存する過渡期なので、このくらいのCompose化が一番無難かな~とは思っています。

Activity

Activityには、最低限の処理のみ記載します。
主にComposeから受け取った画面遷移のイベントを受けて、Activity遷移を行う役割に限定されると思います。
将来的にJetpackComposeへの完全移行を見据え、Activityへの依存を極力抑えています。

@AndroidEntryPoint

class MainActivity : ComponentActivity() {

override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContent {
HogeTheme {
MainScreen(
navigateToNextScreen = ::navigateToNextActivity
)
}
}
}

private fun navigateToNextActivity() {
// TODO: startActivity
}
}

ViewModel

特殊なことはしていないですが、意識していることはいくつかあります。

  • ユーザの操作の名前でイベントのメソッドを設置(onChangeText、onClickSubmitなど)
  • データの操作を意識させるような名前にはしない(onUpdateTextみたいな名前はNG)
@HiltViewModel

class MainViewModel : ViewModel() {

// UiState
private val _uiState = MutableStateFlow(MainUiState.Loading)
val uiState = _uiState.asStateFlow()
private val mainContentUiState: MainContentUiState?
get() = (uiState.value as? MainUiState.Succeeded)?.mainContentUiState

// 遷移イベント
private val _navigateEvent = MutableSharedFlow()
val navigateEvent = _navigateEvent.asSharedFlow()

fun onChangeText(value: TextFieldValue) {
val mainContentUiState = mainContentUiState ?: return
_uiState.update {
MainUiState.Succeeded(
mainContentUiState.copy(textFieldValue = value)
)
}
}

fun onClickSubmit() {
viewModelScope.launch {
_navigateEvent.emit(Unit)
}
}
}

ScreenCompose

  • 1画面分のCompose
  • 初期表示のLoadingなどの特殊な状態はここに記載
  • メインの表示物はComtentComposeに記載
  • プレビューは用意しない(後述のContentComposeで)
  • ViewModelはhiltでインジェクト(hiltViewModelはhilt-navigation-composeにあるのでプロジェクトに追加してください)
@Composable

fun MainScreen(
navigateToNextScreen: () -> Unit,
viewModel: MainViewModel = hiltViewModel()
) {
val uiState: MainUiState by viewModel.uiState.collectAsStateWithLifecycle()

// 遷移イベント(collectWithLifecycleについては後述)
viewModel.navigateEvent.

記事の続きは下のURLをクリック!

https://rightcode.co.jp/blogs/47047



エンジニア積極採用中です!

現在、WEBエンジニア、モバイルエンジニア、デザイナー、営業などを積極採用中です!

採用ページはこちら:https://rightcode.co.jp/recruit

社員の声や社風などを知りたい方はこちら:https://rightcode.co.jp/blogs?category=life

社長と一杯飲みながらお話しませんか?(転職者向け)

特設ページはこちら: https://rightcode.co.jp/gohan-sake-president-talk

もっとワクワクしたいあなたへ

現在、ライトコードでは「WEBエンジニア」「モバイルエンジニア」「ゲームエンジニア」、「デザイナー」「WEBディレクター」「営業」などを積極採用中です!

ライトコードは技術力に定評のある受託開発をメインにしているIT企業です。

有名WEBサービスやアプリの受託開発などの企画、開発案件が目白押しの状況です。

  • もっと大きなことに挑戦したい!
  • エンジニアとしてもっと成長したい!
  • モダンな技術に触れたい!

現状に満足していない方は、まずは、エンジニアとしても第一線を走り続ける弊社代表と気軽にお話してみませんか?

ネット上では、ちょっとユルそうな会社に感じると思いますが(笑)、
実は技術力に定評があり、沢山の実績を残している会社ということをお伝えしたいと思っております。

  • ライトコードの魅力を知っていただきたい!
  • 社風や文化なども知っていただきたい!
  • 技術に対して熱意のある方に入社していただきたい!

一度、【Wantedly内の弊社ページ】や【コーポレートサイト】をのぞいてみてください。



Invitation from 株式会社ライトコード
If this story triggered your interest, have a chat with the team?
株式会社ライトコード's job postings

Weekly ranking

Show other rankings
Like Hiroyuki Choshi's Story
Let Hiroyuki Choshi's company know you're interested in their content