Shared Flow의 사자
화면 구성 등
화면 설정
'맛있고 건강한'안드로이드 버전의 소개 화면이다.
이 화면을 열면 API에서 정보를 가져와 설정하고 편집할 수 있습니다.
"활동량"을 클릭한 후 ↓의 활동량 선택 화면으로 이동합니다.
맛있는 건강 활동량 선택 화면
이것은 개인 프로필 화면에 표시되는 활동량을 초기값으로 설정합니다
스스로 변경할 수 있습니다.
이렇게 구성된 화면을 만들 때.
※ 이번 예에서 스팸 화면과 활동량 선택 화면 각각의 처리를 쉐어의 뷰 모델에 적었고, 이후 재평가 시 어느 화면이 처리됐는지 알 수 없음
등 단점을 꼽았다.
SharedFlow의 준비.
class Share {
private val _testFlow = MutableSharedFlow<String>(1)
val testFlow: SharedFlow<String> = _testFlow
suspend fun testSend(args: String) = _testFlow.emit(args)
}
MutableSharedFlow의 리플레이 수가 1 이상으로 제작됐다.개인 프로필 화면에서 emit를 구독한 후 활동량 화면을 구독할 때 데이터를 얻기 위해서다.
화면 소개 ViewModel
private val share: Share by inject()
val input = share.testFlow.asLiveData()
init {
request.onEach {
share.testSend(it)
}.launchIn(viewModelScope)
}
화면 표시는 SharedFlow 값을 기반으로 합니다.이번에 asveData를 만들었지만 Mutable LiveData를 발표하고 포즈를 취할 수도 있다.
활성 선택 화면
ViewModel
private val share: Share by inject()
val selected = share.testFlow.asLiveData()
init {
request.onEach {
share.testSend(it)
}.launchIn(viewModelScope)
}
여기 프로필 화면과 같이 SharedFlow를 구독하여 초기 선택의 값을 설정합니다.Fragment
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
binding.lifecycleOwner = viewLifecycleOwner
binding.viewModel = viewModel
binding.button.setOnClickListener {
viewModel.viewModelScope.launch {
share.testSend(viewModel.select)
}
findNavController().popBackStack()
}
}
결정 버튼을 누른 후 SharedFlow에서 선택한 값 emit.이렇게 되면 프로필 화면의 ViewModel 구독 값도 변경됩니다.
※ ViewModelScope를 사용할 때는 emit와 함께 프로필 화면으로 돌아가기 때문에 ViewLifecycleScope를 사용하는 것보다 안전하다고 생각합니다.
→ 하면 어떨까???
결론
SharedFlow를 이용하면 원하는 곳에서 마음대로 구독할 수 있고 유형을 자유롭게 선택할 수 있어 개인적으로는 최고다.
뷰모델도 더러워지지 않고 편하지 않아요?
Reference
이 문제에 관하여(Shared Flow의 사자), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://zenn.dev/sobya/articles/30a63f818466eb텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)