Compose - カスタムスコープ制限機能

1. コンセプト

        Compose のスコープには多くのアプリケーションがあります。たとえば、weight 修飾子は RowScope または ColumnScope スコープでのみ使用でき、item コンポーネントは LazyListScope スコープでのみ使用できます。

        apply() や let() などの標準ライブラリのスコープ関数は、さまざまな方法でコンテキスト オブジェクトを保持して返します。これらが呼び出されるとき、Lambda パラメーターは特定のスコープ内になります。

2.カスタマイズ

2.1 インターフェイスをスコープとして記述する

機能 (メンバーのメソッドとプロパティ) を定義します。

interface GuideScreenScope {
    val isShownOnce: Boolean
    @Composable fun ShowGuide()
    @Composable fun DrawLine()
}

2.2 インターフェースの実装

実装。

class GuideScreenScopeImpl : GuideScreenScope {
    override val isShownOnce: Boolean
        get() = TODO("编写判断逻辑")
    @Composable
    override fun ShowGuide() { TODO("编写界面") }
}

2.3 露光方法

Lambda パラメータのレシーバーをインターフェイスに設定すると、スコープが制限され、スコープ内のメンバー関数とプロパティを Lambda で呼び出せるようになります。

@Composable
fun GuideScreen(content: @Composable GuideScreenScope.() -> Unit) {
    //TODO:实现其它逻辑,例如先显示一段动画
    GuideScreenScopeImpl().content()
}

3.4 外部使用

@Composable
fun Demo() {
    GuideScreen {
        if (!isShownOnce) {
            ShowGuide()
        }
    }
}

 

おすすめ

転載: blog.csdn.net/HugMua/article/details/132630119