当前位置: 首页 > news >正文

美橙互联旗下网站做一个简单的网站多少钱

美橙互联旗下网站,做一个简单的网站多少钱,在线设计闪字图片,网站如何在手机端做适配这一节主要了解一下CompositionLocal&#xff0c;CompositionLocal是Jetpack Compose中用于组件树内隐式数据传递的核心机制&#xff0c;其设计初衷是解决跨多层组件的数据共享问题&#xff0c;避免通过函数参数逐层传递数据。简单总结:API: (1)compositionLocalOf<T>创建…

        这一节主要了解一下CompositionLocal,CompositionLocal是Jetpack Compose中用于组件树内隐式数据传递的核心机制,其设计初衷是解决跨多层组件的数据共享问题,避免通过函数参数逐层传递数据。简单总结:

API:
(1)compositionLocalOf<T>
创建一个动态的CompositionLocal实例,当值变化时,仅触发读取该值的组件重组。
(2)staticCompositionLocalOf<T>
创建一个静态的CompositionLocal实例,值变化时触发整个作用域内所有组件重组。 
(3)CompositionLocalProvider
为子组件树提供CompositionLocal的值,作用域仅限于其内容块。 
场景:
1. 主题与样式配置,最常见的场景是传递应用主题信息(颜色、字体、间距等),让组件树中的所有子组件都能访问统一的样式配置。
2. 上下文信息传递,替代传统Android中的Context传递,在Compose组件树中共享上下文相关数据。 
3. 用户状态与全局配置,共享用户信息(如登录状态、权限)或全局配置,让深层嵌套的组件也能访问这些状态。
4. 工具类与服务共享,传递工具类实例或服务,避免在每个组件中单独初始化。

栗子:

import androidx.compose.foundation.background
import androidx.compose.foundation.layout.Box
import androidx.compose.foundation.layout.fillMaxSize
import androidx.compose.material3.MaterialTheme
import androidx.compose.material3.Text
import androidx.compose.runtime.Composable
import androidx.compose.runtime.CompositionLocalProvider
import androidx.compose.runtime.compositionLocalOf
import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
import androidx.compose.ui.graphics.Color
import androidx.compose.ui.unit.spprivate val LocalAppTheme = compositionLocalOf<AppTheme> {error("No AppTheme provided")
}data class AppTheme(val primaryColor: Color,val textColor: Color,val fontSize: Float
)@Composable
fun ThemeProvider(theme: AppTheme = AppTheme(primaryColor = Color.Blue,textColor = Color.White,fontSize = 16f),content: @Composable () -> Unit
) {CompositionLocalProvider(LocalAppTheme provides theme) {content()}
}@Composable
fun ThemedText(text: String) {val theme = LocalAppTheme.currentText(text = text,color = theme.textColor,fontSize =18.sp)
}@Composable
fun CompositionLocalExample() {ThemeProvider {Box(modifier = Modifier.fillMaxSize().background(LocalAppTheme.current.primaryColor),contentAlignment = Alignment.Center) {ThemedText("Hello CompositionLocal!")}}
}
import androidx.compose.foundation.layout.Arrangement
import androidx.compose.foundation.layout.Column
import androidx.compose.foundation.layout.fillMaxSize
import androidx.compose.material3.Button
import androidx.compose.material3.Text
import androidx.compose.runtime.Composable
import androidx.compose.runtime.CompositionLocalProvider
import androidx.compose.runtime.getValue
import androidx.compose.runtime.mutableStateOf
import androidx.compose.runtime.compositionLocalOf
import androidx.compose.runtime.remember
import androidx.compose.runtime.setValue
import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifierdata class PermissionState(val cameraGranted: Boolean,val locationGranted: Boolean,val storageGranted: Boolean,val requestCamera: () -> Unit,val requestLocation: () -> Unit,val requestStorage: () -> Unit
)private val LocalPermissions = compositionLocalOf<PermissionState> {error("No PermissionState provided. Make sure to wrap your content with PermissionProvider.")
}@Composable
fun PermissionProvider(content: @Composable () -> Unit
) {var cameraGranted by remember { mutableStateOf(false) }var locationGranted by remember { mutableStateOf(false) }var storageGranted by remember { mutableStateOf(false) }val permissionState = PermissionState(cameraGranted = cameraGranted,locationGranted = locationGranted,storageGranted = storageGranted,requestCamera = { cameraGranted = true },  // 实际会调用真实的权限请求API,只是演示requestLocation = { locationGranted = true },requestStorage = { storageGranted = true })CompositionLocalProvider(LocalPermissions provides permissionState) {content()}
}@Composable
fun CameraFeature() {val permissions = LocalPermissions.currentColumn(horizontalAlignment = Alignment.CenterHorizontally,verticalArrangement = Arrangement.Center) {Text("相机功能")if (permissions.cameraGranted) {Text("✅ 相机权限已授予")Button(onClick = { /* 使用相机的逻辑 */ }) {Text("拍照")}} else {Text("❌ 相机权限未授予")Button(onClick = permissions.requestCamera) {Text("请求相机权限")}}}
}@Composable
fun LocationFeature() {val permissions = LocalPermissions.currentColumn(horizontalAlignment = Alignment.CenterHorizontally,verticalArrangement = Arrangement.Center) {Text("位置功能")if (permissions.locationGranted) {Text("✅ 位置权限已授予")Button(onClick = { /* 使用位置的逻辑 */ }) {Text("获取当前位置")}} else {Text("❌ 位置权限未授予")Button(onClick = permissions.requestLocation) {Text("请求位置权限")}}}
}@Composable
fun FeaturesScreen() {Column(modifier = Modifier.fillMaxSize(),horizontalAlignment = Alignment.CenterHorizontally,verticalArrangement = Arrangement.SpaceEvenly) {Text("应用功能", style = androidx.compose.material3.MaterialTheme.typography.headlineMedium)CameraFeature()LocationFeature()}
}@Composable
fun PermissionTest() {    PermissionProvider {FeaturesScreen()}
}

注意
避免滥用:CompositionLocal适合共享“全局/半全局”数据,若数据仅在少数几层传递,直接用参数传递更清晰。
明确作用域:通过 CompositionLocalProvider限制数据的生效范围,避免全局污染。
性能考量:CompositionLocal的值变化会导致依赖它的所有组件重组,不宜用于频繁变化的数据。

http://www.dtcms.com/a/475772.html

相关文章:

  • 开源saas多用户建站系统企业建立网站需要
  • 安阳免费搭建自己的网站郑州微信公众号外包
  • 成都成华区网站建设百度认证是什么
  • 无锡网站关键词优化windows优化大师是自带的吗
  • 企业官网建站费用无代码网站建设
  • 合肥环保公司网站建设成都网络公司排名榜
  • 加强文明网站建设网站设计费用
  • 探索 Python 钩子函数:以json模块中的object_hook为例
  • 益阳网站建设益阳网站开发视频下载
  • 网站的稳定性自己怎么做网站的聚合页面
  • wordpress网站发布wordpress模版mx
  • 如何选择做网站架设网站 自己购买服务器
  • 镇江网站建设流程网页效果图设计教程
  • 广州网站建设广州网络推广公司排名济南房地产网
  • sogo提交网站入口如何利用网络进行推广和宣传
  • 北京做手机网站揭阳企业建站系统
  • 长春公司网站推广项目管理流程
  • 深圳网站建设服务哪家专业app营销策略有哪些
  • 龙岗网站建做网站的商家怎么后去流量费
  • 电视台网站模版凡科二级网站怎么做
  • 阿里云里面网站建设外贸人才网招聘
  • 如何制作手机免费网站模板网站前端设计公司
  • 企业网站优化怎么做手机模板制作
  • 做网站备案 空间是什么意思软件开发项目管理工具
  • 顺德大良那里做网站好泰州品牌网站建设
  • django做的网站有哪些昆山网站制作公司
  • 域名解析平台网站建设淘宝做网站的多少钱
  • 网站内容建设是什么合肥滨湖建设指挥部网站
  • 相亲网站界面设计做箱包外贸哪个网站好
  • 保定网站开发公司淮北市建设工程信息网