当前位置:网站首页>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()
}
}
}
边栏推荐
- 卷积神经网络(CNN)网络结构及模型原理介绍
- 2021:Graphhopper: Multi-Hop Scene Graph Reasoning for Visual Question Answering
- How can e-commerce products be promoted and advertised on Zhihu?
- Mmdetection valueerror: need at least one array to concatenate solution
- 2021:Beyond Question-Based Biases:Assessing Multimodal Shortcut Learning in Visual Question Answeri
- Pat class a 1024 palindromic number
- 2019LXMERT:Learning Cross-Modality Encoder Representations from Transformers
- 2019LXMERT:Learning Cross-Modality Encoder Representations from Transformers
- ERP需求和销售管理 金蝶
- 2021:adavqa: overlapping language priors with adapted margin cosine loss *
猜你喜欢
PAT甲级 1019 General Palindromic Number
Super détaillé, 20 000 caractères détaillés, mangez à travers es!
GAMES101作业7提高-微表面材质的实现过程
2021:Passage Retrieval for Outside-KnowledgeVisual Question Answering通道检索的外部知识视觉问答
【一起上水硕系列】Day 6
455. distribute biscuits [distribution questions]
Mmdetection uses yolox to train its own coco data set
Pat grade a 1019 general palindromic number
2016Analyzing the Behavior of Visual Question Answering Models
ERP需求和销售管理 金蝶
随机推荐
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
Usage knowledge of mobile phones in new fields
Flink learning 4:flink technology stack
使用promise的基本功能【四、Promise源码】
文旅灯光秀打破时空限制,展现景区夜游魅力
Window 加密壳实现
清华&华为等 综述 | 语义通信:原则与挑战
MySql的开发环境
Basic functions of promise [IV. promise source code]
NestJS环境变量配置,解决如何在拦截器(interceptor)注入服务(service)的问题
2020:MUTANT: A Training Paradigm for Out-of-Distribution Generalizationin Visual Question Answering
A^2=E | 方程的解 | 这个方程究竟能告诉我们什么
投资理财产品的钱有保障吗?会不会没有了?
jmeter分布式压测
2021:Check it again:Progressive Visual Question Answering via Visual Entailment通过视觉暗示进行渐进式视觉问答
2020:MUTANT: A Training Paradigm for Out-of-Distribution Generalizationin Visual Question Answering
语义化版本 2.0.0
Web development framework - Express (installation and use, static hosting, routing processing, use of Middleware)
苹果唯一图谱架构常识
苹果手机证书构体知识