【问题标题】:Can the app provide Jetpack Compose view for the SDK to recreate?应用程序能否提供 Jetpack Compose 视图供 SDK 重新创建?
【发布时间】:2021-12-31 23:40:51
【问题描述】:

我们计划重新设计 SDK 中的一些布局。现在我们使用 XML 并允许客户端的应用程序覆盖布局,他们只需复制我们的 XML 文件并应用自定义,无需修改元素的 ID。现在,我不确定如何使用 Jetpack compose 做类似的事情。

我正在从我们的 IOS SDK 中寻找以下方法以在 Android 中实现:

  1. 我们创建 UIView 的界面(如语言选择视图,它具有 SearchView、两个 TextView 和一个按钮)。
  2. 然后我们公开这个接口并创建一个静态方法,该方法接受视图的具体实现。
  3. 然后,我们的 SDK 会检查客户端应用程序是否确实进行了修改,如果修改了,我们会放大提供的视图。

Jetpack Compose 可以吗?我假设您也可以公开接口,然后客户端应用程序提供布局结构。但是,我们不希望让客户端应用处理状态。我们希望他们使用 Jetpack compose 进行布局显示。

【问题讨论】:

    标签: android android-xml android-jetpack-compose android-jetpack


    【解决方案1】:

    您可以使用@Composable 标记您的视图 lambda 参数,以便将它们用作视图构建器:

    @Composable
    fun SdkView(
        title: @Composable () -> Unit,
        content: @Composable (SomeState) -> Unit,
    ) {
        // here you can use rememberSaveable or view model instead to get more reliable state storage 
        val state = remember { SomeState() }
        Column {
            title()
            content(state)
        }
    }
    
    @Composable
    fun ClientView(
    ) {
        SdkView(
            title = {
                Text("Hello")
            },
            content = { state ->
                // build view depending on state
            }
        )
    }
    

    【讨论】:

    • 谢谢,绝对有前途!但是,我们应该将我们的 SDK 的视图状态暴露给客户端视图吗?假设我们有加载、成功和错误状态。我们应该揭露他们吗?如果我们想在成功状态后导航用户怎么办?我们想在内部处理所有这些,并且只为无状态 UI 的东西公开 SdkView
    • 还有状态应该怎么处理?我应该公开状态,然后客户端视图会根据状态呈现视图吗?我个人希望声明是内部的,只接受意见。如果我公开 3 个方法,每个方法都接受用于加载、成功和失败视图的 UI 元素,它会起作用吗?然后我会得到视图并在内部渲染它们。
    • @ViktorVostrikov 当然,您不必将实际状态提供给用户。你的SdkView 只能有像title 这样的无状态参数,并且根据你的状态,你可以选择使用哪个视图进行绘图,使用ifwhen 等。
    猜你喜欢
    • 2022-10-25
    • 1970-01-01
    • 2021-05-30
    • 1970-01-01
    • 2022-09-25
    • 1970-01-01
    • 1970-01-01
    • 2022-10-15
    • 1970-01-01
    相关资源
    最近更新 更多