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()
}
}
}