我有一个带有视图模型的屏幕。该屏幕有一个可组合项,其工作是基于视图模型渲染 UI 内容。单击可组合项时,它会导航到过滤器屏幕,用户可以在其中更新在视图模型中更新的过滤器。看截图
当我向后导航时,父屏幕仍然保留导航到屏幕截图中的过滤器设置之前的旧数据。
父可组合项包含一个过滤卡可组合项,其数据由视图模型驱动。单击后,它将导航到“过滤器”屏幕,如上图所示。
@Composable
fun ParentScreen(
navController: NavController,
modifier: Modifier = Modifier,
vm: FilterViewModel = hiltViewModel(),
) {
Filters(
showCompleted = vm.filterState.showCompleted,
showCustomerReturns = vm.filterState.showCustomerReturns,
vendorName = vm.filterState.vendorName,
loadGroup = vm.filterState.loadGroup,
onClick = { navController.navigate(NavGraph.FILTER_SCREEN) }
)
}
过滤器视图模型:
@HiltViewModel
class FilterViewModel @Inject constructor(
private val Filter: Filter
) : ViewModel() {
private val _filterState: MutableStateFlow<FilterState> by lazy {
MutableStateFlow(
FilterState(
receivingFilter.loadGroup(),
receivingFilter.showCompleted(),
receivingFilter.showCustomerReturns(),
receivingFilter.vendorName(),
)
)
}
var filterState = _filterState.asStateFlow()
}
data class FilterState(
val loadGroup: String,
val showCompleted: Boolean,
val showCustomerReturns: Boolean,
val vendorName: String,
)
通过
navController.popBackStack()
返回父屏幕。
我该如何解决这个问题?该应用程序使用 Jetpack compose 和 Hilt 进行依赖注入。
您没有收集流量,因此您没有获得新值。
在您的 ParentScreen Composable 中收集您的 filterFlow 作为状态并使用它来传递值。
@Composable
fun ParentScreen(
navController: NavController,
modifier: Modifier = Modifier,
vm: FilterViewModel = hiltViewModel(),
) {
val filterState by vm.filterState.collectAsState()
Filters(
showCompleted = filterState.showCompleted,
showCustomerReturns = filterState.showCustomerReturns,
vendorName = filterState.vendorName,
loadGroup = filterState.loadGroup,
onClick = { navController.navigate(NavGraph.FILTER_SCREEN) }
)
}