diff --git a/app/src/main/java/com/konkuk/medicarecall/ui/feature/home/navigation/HomeNavigation.kt b/app/src/main/java/com/konkuk/medicarecall/ui/feature/home/navigation/HomeNavigation.kt index 96b7230e..0b4a12dc 100644 --- a/app/src/main/java/com/konkuk/medicarecall/ui/feature/home/navigation/HomeNavigation.kt +++ b/app/src/main/java/com/konkuk/medicarecall/ui/feature/home/navigation/HomeNavigation.kt @@ -39,7 +39,6 @@ fun NavGraphBuilder.homeNavGraph( navigateToGlucoseDetailScreen = { elderId -> navigateToGlucoseDetailScreen(elderId) }, - mainBackStackEntry = backStackEntry, ) } } diff --git a/app/src/main/java/com/konkuk/medicarecall/ui/feature/home/screen/HomeScreen.kt b/app/src/main/java/com/konkuk/medicarecall/ui/feature/home/screen/HomeScreen.kt index 9f4c0926..dabbfdfa 100644 --- a/app/src/main/java/com/konkuk/medicarecall/ui/feature/home/screen/HomeScreen.kt +++ b/app/src/main/java/com/konkuk/medicarecall/ui/feature/home/screen/HomeScreen.kt @@ -47,7 +47,6 @@ import androidx.compose.ui.res.painterResource import androidx.compose.ui.tooling.preview.Preview import androidx.compose.ui.unit.dp import androidx.lifecycle.compose.collectAsStateWithLifecycle -import androidx.navigation.NavBackStackEntry import com.konkuk.medicarecall.R import com.konkuk.medicarecall.data.dto.response.HomeResponseDto import com.konkuk.medicarecall.ui.common.component.NameBar @@ -79,7 +78,6 @@ fun HomeScreen( navigateToStateHealthDetailScreen: (Int) -> Unit, navigateToStateMentalDetailScreen: (Int) -> Unit, navigateToGlucoseDetailScreen: (Int) -> Unit, - mainBackStackEntry: NavBackStackEntry, ) { val homeUiState by viewModel.homeUiState.collectAsStateWithLifecycle() val elderInfoList by viewModel.elderInfoList.collectAsStateWithLifecycle() @@ -92,14 +90,14 @@ fun HomeScreen( val snackbarHostState = remember { SnackbarHostState() } val scope = rememberCoroutineScope() - val updatedName by mainBackStackEntry.savedStateHandle - .getStateFlow("ELDER_NAME_UPDATED", null) - .collectAsStateWithLifecycle() + // 네비게이션 결과 + val updatedName by viewModel.updatedName.collectAsStateWithLifecycle() LaunchedEffect(updatedName) { updatedName?.let { viewModel.overrideName(it) - mainBackStackEntry.savedStateHandle.remove("ELDER_NAME_UPDATED") // 원샷 처리 + // mainBackStackEntry.savedStateHandle.remove("ELDER_NAME_UPDATED") // 원샷 처리 + viewModel.clearUpdatedName() } } diff --git a/app/src/main/java/com/konkuk/medicarecall/ui/feature/home/viewmodel/HomeViewModel.kt b/app/src/main/java/com/konkuk/medicarecall/ui/feature/home/viewmodel/HomeViewModel.kt index 49e97ac0..f91f055c 100644 --- a/app/src/main/java/com/konkuk/medicarecall/ui/feature/home/viewmodel/HomeViewModel.kt +++ b/app/src/main/java/com/konkuk/medicarecall/ui/feature/home/viewmodel/HomeViewModel.kt @@ -31,6 +31,17 @@ class HomeViewModel( private val savedStateHandle: SavedStateHandle, private val eldersHealthInfoRepository: EldersHealthInfoRepository, ) : ViewModel() { + + // 이름 업데이트 수신 + private val _updatedName: StateFlow = + savedStateHandle.getStateFlow("ELDER_NAME_UPDATED", null) + + val updatedName: StateFlow = _updatedName + + fun clearUpdatedName() { + savedStateHandle.remove("ELDER_NAME_UPDATED") + } + fun overrideName(newName: String) { val id = selectedElderId.value ?: return diff --git a/app/src/main/java/com/konkuk/medicarecall/ui/feature/statistics/screen/StatisticsScreen.kt b/app/src/main/java/com/konkuk/medicarecall/ui/feature/statistics/screen/StatisticsScreen.kt index 65a7282e..8b4ae342 100644 --- a/app/src/main/java/com/konkuk/medicarecall/ui/feature/statistics/screen/StatisticsScreen.kt +++ b/app/src/main/java/com/konkuk/medicarecall/ui/feature/statistics/screen/StatisticsScreen.kt @@ -48,7 +48,6 @@ import com.konkuk.medicarecall.ui.feature.statistics.weeklycard.WeeklyMentalCard import com.konkuk.medicarecall.ui.feature.statistics.weeklycard.WeeklySleepCard import com.konkuk.medicarecall.ui.feature.statistics.weeklycard.WeeklySummaryCard import com.konkuk.medicarecall.ui.theme.MediCareCallTheme -import kotlinx.coroutines.flow.MutableStateFlow import org.koin.androidx.compose.koinViewModel import java.time.LocalDate @@ -105,18 +104,22 @@ fun StatisticsScreen( LaunchedEffect(selectedElderId) { selectedElderId?.let { statisticsViewModel.setSelectedElderId(it) } } - val savedStateHandle = navController.currentBackStackEntry?.savedStateHandle - val medsChanged by (savedStateHandle?.getStateFlow("medsChanged", false) ?: MutableStateFlow( - false, - )) - .collectAsStateWithLifecycle() - LaunchedEffect(medsChanged) { - if (medsChanged) { - statisticsViewModel.refresh() - savedStateHandle?.set("medsChanged", false) - } + // 복약 변경 이벤트 수신 + LaunchedEffect(Unit) { + navController.currentBackStackEntry + ?.savedStateHandle + ?.getStateFlow("medsChanged", false) + ?.collect { changed -> + if (changed) { + statisticsViewModel.onMedsChanged() + navController.currentBackStackEntry + ?.savedStateHandle + ?.set("medsChanged", false) + } + } } + StatisticsScreenLayout( modifier = modifier, uiState = uiState, diff --git a/app/src/main/java/com/konkuk/medicarecall/ui/feature/statistics/viewmodel/StatisticsViewModel.kt b/app/src/main/java/com/konkuk/medicarecall/ui/feature/statistics/viewmodel/StatisticsViewModel.kt index 52d3d7c1..4b293cff 100644 --- a/app/src/main/java/com/konkuk/medicarecall/ui/feature/statistics/viewmodel/StatisticsViewModel.kt +++ b/app/src/main/java/com/konkuk/medicarecall/ui/feature/statistics/viewmodel/StatisticsViewModel.kt @@ -29,7 +29,10 @@ class StatisticsViewModel( private val repository: StatisticsRepository, private val eldersHealthInfoRepository: EldersHealthInfoRepository, ) : ViewModel() { - + // 네비게이션 결과(복약 변경 등)를 ViewModel 책임으로 처리 + fun onMedsChanged() { + refresh() + } private val _uiState = MutableStateFlow(StatisticsUiState()) val uiState: StateFlow = _uiState.asStateFlow()