스팀 앱 개발기 #107 - 버그 수정: 태그 화면 복귀시 포스트 리스트 다시 로딩됨

버그 수정: 태그 화면 복귀시 포스트 리스트 다시 로딩됨

No. 107
2023. 10. 23 (월) | Written by @dorian-mobileapp

시작하며...

포스트 화면 개발 후, 개발 진도에 다시 속도를 내고자 합니다. 이번에는 신규 개발 대신 기존 태그 화면에서 발견된 오류를 수정합니다.


작업 내용

  • 버그 수정: 태그 화면 복귀시 포스트 리스트 다시 로딩됨

버그 수정: 태그 화면 복귀시 포스트 리스트 다시 로딩됨

문제점

태그 화면이 시작될때 trending 탭을 임의로 클릭 처리하여 포스트 리스트를 로딩했습니다. 문제는 이 방식이 포스트 화면 진입했다가 태그 화면으로 복귀할 때 리스트가 다시 로딩된다는 점입니다.

또 다른 문제점은 포스트 리스트를 읽는 API가 중복해서 실행되는 점입니다. 뷰모델 TagsViewModel 클래스에서 TagsState 자료 뿐만 아니라 태그, 정렬 데이터도 코루틴 Flow로 수집하게 하였고 TagsFragment 클래스에서 각 데이터를 캐치할 때마다 포스트 리스트를 읽는 API가 실행되었습니다.

로직 수정
  • 코루틴 Flow
    • 이전: TagsState, 태그, 정렬 수집
    • 변경: TagsState 자료만 수집
  • trending, new, payout 탭 클릭시
    • 이전: 코루틴 Flow에 정렬 값 주입(emit)
    • 변경: 포스트 리스트를 직접 로딩하게 함

추가 - 초기 데이터 로딩은 어디서?

TagFragment 화면이 초기화될 때 데이터 로딩을 직접 실행하는 것을 고려해 보았습니다. 그러나 그것의 MainActivity 액티비티를 통해 MainViewModel 객체의 currentTag 라이브 데이터 관찰(observe)시 자동으로 최근 태그 값이 읽힘을 확인했습니다. 이 곳에서 데이터를 로딩할지 아니면 기존의 데이터를 유지할지 판단하게끔 했습니다.

참고로 아래 코드는 currentTag 라이브 데이터를 관찰, 처리하는 코드입니다. TagsFragment 초기 실행시 TagsState 데이터의 타입은 TagsState.Loading이고요. 포스트 화면 진입했다 태그 화면 복귀시 TagsState 데이터의 타입은 TagsState.Success입니다. 이 타입의 값이 무엇인가에 따라 데이터를 로딩할지 아니면 기존의 데이터를 유지할지 결정합니다.

private val currentTagObserver = Observer<String> { newTag ->
    val tagState: TagsState = viewModel.flowTagsState.value
    if (tagState is TagsState.Success) {
        if (newTag == viewModel.tag) {
            updateRankedList(tagState.tagList)
            return@Observer
        }
    }

    viewModel.tag = newTag
    readRankedPosts()
}

GitHub Commit


마치며...

포스트 화면 개발에 상당한 시간이 소요되었지만, 이번 오류 수정은 다행히 빠르게 마무리가 되었습니다. 이후 개발도 보다 순조롭게 진행되기를 바라는 마음입니다.


지난 스팀 앱 개발기


Layout provided by Steemit Enhancer hommage by ayogom


Posted through the ECblog app (https://blog.etain.club)
Sort:  

[광고] STEEM 개발자 커뮤니티에 참여 하시면, 다양한 혜택을 받을 수 있습니다.

안녕하세요.
SteemitKorea팀에서 제공하는 'steemit-enhancer'를 사용해 주셔서 감사합니다. 개선 사항이 있으면 언제나 저에게 연락을 주시면 되고, 관심이 있으신 분들은 https://cafe.naver.com/steemitkorea/425 에서 받아보실 수 있습니다. 사용시 @응원해 가 포함이 되며, 악용시에는 모든 서비스에서 제외될 수 있음을 알려드립니다.

Thank you, friend!
I'm @steem.history, who is steem witness.
Thank you for witnessvoting for me.
image.png
please click it!
image.png
(Go to https://steemit.com/~witnesses and type fbslo at the bottom of the page)

The weight is reduced because of the lack of Voting Power. If you vote for me as a witness, you can get my little vote.


안녕하세요.
이 글은 SteemitKorea팀(@ayogom)님께서 저자이신 @dorian-mobileapp님을 응원하는 글입니다.
소정의 보팅을 해드렸습니다 ^^ 항상 좋은글 부탁드립니다
SteemitKorea팀에서는 보다 즐거운 steemit 생활을 위해 노력하고 있습니다.
이 글은 다음날 다시 한번 포스팅을 통해 소개 될 예정입니다. 감사합니다!

화이팅입니다~!

Coin Marketplace

STEEM 0.20
TRX 0.12
JST 0.029
BTC 61153.73
ETH 3403.85
USDT 1.00
SBD 2.51