Skip to content

Commit de1cfa2

Browse files
committed
fix: refresh review list after write
1 parent 5f5e127 commit de1cfa2

2 files changed

Lines changed: 33 additions & 4 deletions

File tree

app/src/main/java/com/eatssu/android/presentation/cafeteria/review/ReviewNav.kt

Lines changed: 24 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,9 @@
11
package com.eatssu.android.presentation.cafeteria.review
22

33
import androidx.compose.runtime.Composable
4+
import androidx.compose.runtime.LaunchedEffect
5+
import androidx.compose.runtime.collectAsState
6+
import androidx.compose.runtime.getValue
47
import androidx.navigation.NavHostController
58
import androidx.navigation.compose.NavHost
69
import androidx.navigation.compose.composable
@@ -17,6 +20,8 @@ object ReviewNav {
1720
const val Modify = "modify"
1821
}
1922

23+
private const val KEY_REVIEW_LIST_REFRESH_NONCE = "review_list_refresh_nonce"
24+
2025
@Composable
2126
fun ReviewNav(
2227
navHostController: NavHostController = rememberNavController(),
@@ -31,11 +36,16 @@ fun ReviewNav(
3136
startDestination = ReviewNav.List
3237
) {
3338
// 리뷰 보기
34-
composable(ReviewNav.List) {
39+
composable(ReviewNav.List) { backStackEntry ->
40+
val refreshNonce by backStackEntry.savedStateHandle
41+
.getStateFlow(KEY_REVIEW_LIST_REFRESH_NONCE, 0L)
42+
.collectAsState()
43+
3544
ReviewListScreen(
3645
menuName = menuName,
3746
menuType = menuType,
3847
id = id,
48+
refreshNonce = refreshNonce,
3949
onBack = { onExit() },
4050
onModifyClick = { review ->
4151
// 선택된 리뷰 데이터를 Modify 화면으로 전달
@@ -54,6 +64,12 @@ fun ReviewNav(
5464
}
5565
}
5666
)
67+
68+
LaunchedEffect(refreshNonce) {
69+
if (refreshNonce != 0L) {
70+
backStackEntry.savedStateHandle[KEY_REVIEW_LIST_REFRESH_NONCE] = 0L
71+
}
72+
}
5773
}
5874

5975
// 리뷰 작성
@@ -62,7 +78,12 @@ fun ReviewNav(
6278
menuType = menuType,
6379
menuName = menuName,
6480
id = id,
65-
onBack = { navHostController.popBackStack() },
81+
onBack = {
82+
navHostController.previousBackStackEntry
83+
?.savedStateHandle
84+
?.set(KEY_REVIEW_LIST_REFRESH_NONCE, System.currentTimeMillis())
85+
navHostController.popBackStack()
86+
},
6687
)
6788
}
6889

@@ -84,4 +105,4 @@ fun ReviewNav(
84105
)
85106
}
86107
}
87-
}
108+
}

app/src/main/java/com/eatssu/android/presentation/cafeteria/review/list/ReviewListScreen.kt

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -77,6 +77,7 @@ fun ReviewListScreen(
7777
menuType: MenuType,
7878
menuName: String,
7979
id: Long,
80+
refreshNonce: Long = 0L,
8081
onBack: () -> Unit = {},
8182
onWriteButtonClick: () -> Unit,
8283
onModifyClick: (Review) -> Unit,
@@ -94,6 +95,13 @@ fun ReviewListScreen(
9495
val reviewPagingItems = viewModel.reviewPagingData.collectAsLazyPagingItems()
9596
val uiEvent by viewModel.uiEvent.collectAsStateWithLifecycle(initialValue = null)
9697

98+
LaunchedEffect(refreshNonce) {
99+
if (refreshNonce == 0L) return@LaunchedEffect
100+
// 리뷰 작성 화면에서 돌아온 경우, 리스트/정보를 강제로 갱신한다.
101+
viewModel.getReview(menuType, id)
102+
reviewPagingItems.refresh()
103+
}
104+
97105
LaunchedEffect(uiEvent) {
98106
when (val event = uiEvent) {
99107
is UiEvent.ShowToast -> context.showToast(event)
@@ -730,4 +738,4 @@ fun ReviewListErrorPreview() {
730738
reviewPagingItems = rememberPreviewPagingItems(pagingData),
731739
)
732740
}
733-
}
741+
}

0 commit comments

Comments
 (0)