스팀 앱 개발기 #165 - 개발 완료: 지갑 화면에 보상 탭 도입 (저자 및 큐레이션 보상)

개발 완료: 지갑 화면에 보상 탭 도입 (저자 및 큐레이션 보상)

No. 165
2026. 09. 09 (수) | Written by @dorian-mobileapp

이번에는 지갑 화면에 보상 탭을 추가했습니다. 저자 및 큐레이션 보상 내역을 볼 수 있게 했구요. 둘 중 무엇을 볼지 선택하기 위해 콤보 박스도 배치했습니다. SDS의 rewars_api는 시작일, 종료일이 필수 파라미터입니다. 사용자가 날짜를 설정하는 것도 나쁘지 않을 것이라 판단하여 날짜 선택도 하게끔 했습니다.


구현 요약

Wallet 화면에 Rewards 탭을 추가했습니다. 총 4개 파일, +443/-4 라인.

1. WalletTabInfo.kt

REWARDS("Rewards") 항목 추가. walletTabList가 이 enum을 그대로 순회하므로 탭 바에 자동 반영됩니다.

2. WalletViewModel.kt

  • ReadAuthorRewardsUseCase, ReadCurationRewardsUseCase 생성자 주입
  • flowRewardsState: StateFlow<State<List<Reward>>> 노출
  • readRewards(account, rewardType, fromTime, toTime) — 종류에 따라 use case를 분기. 두 종류가 state 하나를 공유하므로 콤보 박스 선택이 곧 리스트 교체가 됩니다. 시간 범위는 epoch 초, 오래된 것 먼저라는 계약입니다.

3. WalletScreen.kt

요청하신 화면 구성대로입니다.

컴포저블역할
RewardsTabContentColumn { 콤보박스 + 날짜범위 + LazyColumn }
RewardTypeSelectorauthor / curation 선택 (DropdownMenu)
RewardDateRangeSelectorStart ~ End 두 필드, 탭하면 날짜 선택
RewardDateButton / RewardDatePickerDialogMaterial3 DatePickerDialog
RewardList / RewardItem보상 리스트 (amount / post / time)
  • 상태는 rememberSaveable로 유지하고, LaunchedEffect(account, selectedRewardType, startDate, endDate)로 변경 시 재조회합니다.
  • 스타일은 기존 화면과 통일했습니다 — LightGray + RoundedCornerShape(12.dp), TransferList와 동일한 줄무늬 배경.
  • 각 컴포저블에 @PreviewrewardListForTest 샘플 데이터를 붙였습니다.

시간대 처리DatePickerState는 선택한 날짜를 UTC 자정 millis로 돌려줍니다. 화면은 그 형태로 보관하고, 표시할 때만 UTC 포매터로 yyyy-MM-dd를 찍고, API로 보낼 때 그 연·월·일을 로컬 타임존으로 재구성합니다. Reward.time이 로컬 시각이라 사용자가 고른 범위와 리스트 시각이 일치합니다. minSdk 24 + desugaring 없음이라 java.time 대신 기존 코드와 같은 Calendar/SimpleDateFormat을 썼습니다.

rewardTimeRange() — 두 날짜를 minOf/maxOf먼저 정렬한 뒤에 이른 쪽에 00:00:00, 늦은 쪽에 23:59:59를 붙입니다. 시각이 필드가 아니라 정렬된 위치에 붙으므로 시작일/종료일 순서가 어떻든 양 끝 날짜가 하루 전체로 포함됩니다.

4. WalletViewModelTest.kt

생성자 인자 5개를 모두 채웠습니다. 이 테스트는 transfer use case가 추가된 시점부터 이미 깨져 있던 상태였습니다.


GitHub Commit

보다 자세한 코드는 아래 commit을 참고하세요.


지난 스팀 앱 개발기


Layout provided by Steemit Enhancer hommage by ayogom
Sort:  

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


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

Upvoted! Thank you for supporting witness @jswit.