文章目录
- 一、场景描述
- 二、代码示例
一、场景描述
在Compose中设计思想是分为状态和组件的,组件由状态控制。这个操作和传统的AndroidView不太一样。在Compose中对话框Dialog也是一个组件,其显示和隐藏由外部状态控制。这里有一个场景,假设显示和关闭的时间间隔过短的话,需要将时间延长至两秒后再隐藏。针对这种问题有两种写法,一种是外部控制显示隐藏时机,一种是内部控制。外部控制较为简单,这里不再记录。本文记录下内部控制方式。
二、代码示例
class HomePage{private val countFlow = MutableSharedFlow<String>()@Composablefun FlowWidget(text: String){val (state,change) = remember {mutableStateOf("323123")}LaunchedEffect(text){countFlow.emit(text)}LaunchedEffect(Unit) {countFlow.buffer().collect{delay(2000)change(it)Log.e("YM--->","接受值-->${it}--->time:${System.currentTimeMillis()}")}}Text(text = state)}
}
测试代码如下:
@RequiresApi(Build.VERSION_CODES.O)override fun onCreate(savedInstanceState: Bundle?) {super.onCreate(savedInstanceState)val flowContent = mutableStateOf("1")lifecycleScope.launch(Dispatchers.IO) {delay(1000)flowContent.value = "2"delay(1000)flowContent.value = "3"}setContent {ComposeTestTheme {// A surface container using the 'background' color from the themeSurface(modifier = Modifier.fillMaxSize(),color = MaterialTheme.colors.background) {Box(modifier = Modifier.size(100.dp, 100.dp)) {FlowWidget(flowContent.value)}}}}}