我目前正在开发一个Jetpack Compose
项目,在该项目中我使用 API 实现了自定义图表Canvas
。我使用 aMutableStateFlow<List<Offset>?>
来表示我在画布上绘制的点列表。绘图逻辑在 Canvas Composable 中处理。
ViewModel
当我在using中将点列表设置为 null 时遇到问题_points.emit(null)
。尽管将点设置为 null,Canvas 似乎并不理解它应该清除以前绘制的内容。
这是相关代码的简化版本:
private val _points = MutableStateFlow<List<Offset>?>(null)
val points: StateFlow<List<Offset>?>
get() = _points
private fun updatePoints() = uiEventScope.launch {
val pointList = ArrayList<Offset>()
// Some logic to populate the list...
_points.emit(pointList)
}
private fun removePoints() = uiEventScope.launch {
// Some logic to clear the list or set it to null...
_points.emit(null)
}
val points by viewModel.points.colectAsState()
Canvas(
modifier = Modifier.fillMaxSize()
) {
points?.apply {
for (i in 0 until points.size - 1) {
// Drawing logic...
}
}
}
我预计将点设置为空会清除画布,但似乎以前的内容仍然存在。我将不胜感激任何关于为什么会发生这种情况以及如何确保画布在设置StateFlow
为空时清除其内容的见解。
感谢您的帮助!