当前位置:网站首页>Kotlin Compose compositionLocalOf 与 staticCompositionLocalOf
Kotlin Compose compositionLocalOf 与 staticCompositionLocalOf
2022-06-27 03:36:00 【安果移不动】
Kotlin Compose 隐式传参 CompositionLocalProvider_安果移不动的博客-CSDN博客
Kotlin Compose 自定义 CompositionLocalProvider CompositionLocal_安果移不动的博客-CSDN博客
学习完成上面两个博客知识后。
你会发现。
LocalContext.current指向的是

有时候也许会遇到
staticCompositionLocalOf
compositionLocalOf
两种不同的构建数值的Provider
区别就是
staticCompositionLocalOf 会针对所有的组件进行重绘
而
compositionLocalOf 仅仅会针对单个组件进行重绘


范例代码
package com.anguomob.jecpack.activity.compose.composition.local
import androidx.compose.foundation.background
import androidx.compose.foundation.layout.*
import androidx.compose.material.*
import androidx.compose.runtime.*
import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
import androidx.compose.ui.graphics.Color
import androidx.compose.ui.platform.LocalContext
import androidx.compose.ui.unit.Dp
import androidx.compose.ui.unit.dp
var isStatic = true
var compositionLocalName = ""
val currentLocalColor = if (isStatic) {
compositionLocalName = "StaticCompositionLocal 场景"
staticCompositionLocalOf { Color.Black }
} else {
compositionLocalName = "compositionLocalOf 场景"
compositionLocalOf { Color.Black }
}
//重组标记 组件第一次加载时,recomposeFlog 为Init
//重组之前 也就是第二次加载之前 将recomposeFlog设置为Recompose
var recomposeFlog = "Init"
@Composable
fun CompositionSample3() {
LocalContext.current
val (color, setColor) = remember {
mutableStateOf(Color.Green)
}
Box(modifier = Modifier.fillMaxSize(), contentAlignment = Alignment.Center) {
Column(horizontalAlignment = Alignment.CenterHorizontally) {
Text(" ${compositionLocalName}")
Spacer(modifier = Modifier.padding(20.dp))
//3个 TaggedBox 组件 只有Middle 使用 CompositionLocal
CompositionLocalProvider(currentLocalColor provides color) {
TaggedBox(tag = "Wrapper $recomposeFlog", size = 400.dp, background = Color.Red) {
TaggedBox(
tag = "Middle $recomposeFlog",
size = 300.dp,
background = currentLocalColor.current
) {
TaggedBox(tag = "Inner $recomposeFlog", size = 200.dp, background = Color.Yellow) {
}
}
}
}
Spacer(modifier = Modifier.padding(20.dp))
Button(onClick = {
setColor(Color.Blue)
recomposeFlog = "Recompose"
}) {
Text("修改颜色 观察组件是否重组")
}
}
}
}
@Composable
fun TaggedBox(tag: String, size: Dp, background: Color, contnet: @Composable () -> Unit = {}) {
Column(
modifier = Modifier
.size(size)
.background(background),
horizontalAlignment = Alignment.CenterHorizontally
) {
Text(text = tag)
Box(modifier = Modifier.fillMaxSize(), contentAlignment = Alignment.Center) {
contnet()
}
}
}
边栏推荐
- Window 加密壳实现
- CVPR2021:Separating Skills and Concepts for Novel Visual Question Answering将技巧与概念分开的新视觉问答
- Uni-app 之uParse 富文本解析 完美解析富文本!
- 再探Handler(上)(Handler核心原理最全解析)
- Servlet and JSP final review examination site sorting 42 questions and 42 answers
- 卷积神经网络(CNN)网络结构及模型原理介绍
- 投资理财产品的钱有保障吗?会不会没有了?
- Logarithm
- Description of replacement with STM32 or gd32
- jmeter将上一个请求的结果作为下一个请求的参数
猜你喜欢

Yuantou firm offer weekly record 20220627

2021:Beyond Question-Based Biases:Assessing Multimodal Shortcut Learning in Visual Question Answeri

Il manque beaucoup de fichiers et de répertoires tels que scripts pendant et après l'installation d'anaconda3

ESP8266

2021:Beyond Question-Based Biases:Assessing Multimodal Shortcut Learning in Visual Question Answeri

Yiwen teaches you Kali information collection
![Basic functions of promise [IV. promise source code]](/img/a0/8f28ec8951088b8e66e7079432f326.png)
Basic functions of promise [IV. promise source code]

ERP需求和销售管理 金蝶

2021:Greedy Gradient Ensemble for Robust Visual Question Answering

手撸promise【二、Promise源码】【代码详细注释/测试案例完整】
随机推荐
Super detailed, 20000 word detailed explanation, thoroughly understand es!
How does the brain do arithmetic? Both addition and subtraction methods have special neurons, and the symbol text can activate the same group of cell sub journals
USB DRIVER
投资理财产品的钱有保障吗?会不会没有了?
测试nohup和&的各自作用
MySQL development environment
敏捷开发篇--Agile Development-自用
Pat grade a 1019 general palindromic number
fplan-Powerplan实例
PAT甲级 1018 Public Bike Management
Pat grade a 1026 table tennis
PAT甲级 1024 Palindromic Number
ERP需求和销售管理 金蝶
解码苹果手机证书文件方法
Ledrui ldr6035 usb-c interface device supports rechargeable OTG data transmission scheme.
lodash get js代码实现
Description of replacement with STM32 or gd32
Solve the problem of error reporting in cherry pick submission
TopoLVM: 基于LVM的Kubernetes本地持久化方案,容量感知,动态创建PV,轻松使用本地磁盘
2021:Greedy Gradient Ensemble for Robust Visual Question Answering