代码之家  ›  专栏  ›  技术社区  ›  Special Muesli

了解合成本地

  •  1
  • Special Muesli  · 技术社区  · 1 年前

    Docs

    // MyActivity.kt file
    
    class MyActivity : ComponentActivity() {
        override fun onCreate(savedInstanceState: Bundle?) {
            super.onCreate(savedInstanceState)
    
            setContent {
                // Calculate elevations based on the system theme
                val elevations = if (isSystemInDarkTheme()) {
                    Elevations(card = 1.dp, default = 1.dp)
                } else {
                    Elevations(card = 0.dp, default = 0.dp)
                }
    
                // Bind elevation as the value for LocalElevations
                CompositionLocalProvider(LocalElevations provides elevations) {
                    // ... Content goes here ...
                    // This part of Composition will see the `elevations` instance
                    // when accessing LocalElevations.current
                }
            }
        }
    }
    

    In CompositionLocalProvider 当他们说“ Content goes here 它应该是什么样的内容?

    我只是在寻找全局变量,这一切都很顺利 Compose .

    1 回复  |  直到 1 年前
        1
  •  2
  •   jaspal    1 年前

    对于Compose中的全局变量: 使用CompositionLocal作为上下文感知访问的作用域全局变量 对可组合文件中的本地作用域状态或记忆值使用记住 使用ViewModel进行应用程序范围的状态和逻辑,以保持关注点的分离

    全球状态示例:

    val LocalUserName = compositionLocalOf { "Default User" }
    
    @Composable
    fun MyApp() {
        CompositionLocalProvider(LocalUserName provides "Local") {
    Greeting()
        }
    }
    
    @Composable
    fun Greeting() {
        Text("Hello, ${LocalUserName.current}!")
    }
    

    此模式允许您以Compose惯用的方式干净地管理类全局值,而无需直接依赖传统的全局变量