どうもこんばんわ。
どうでもいいんですけどNext.jsで作り直したこのサイト、Googleに無事嫌われている模様
本題
JetpackComposeで子コンポーネントでクリックされると親のコンポーネントではタッチイベントが貰えません。
子コンポーネントで消費されても親コンポーネントでクリックイベントが来てほしい。
ので作った
環境
なまえ | あたい |
---|
Android | 12 |
Android Studio | Bumblebee |
Kotlin | 1.6.10 |
Compose | 1.1.0-rc03 |
作る
ParentPointerEvent.kt
ファイル名は何でもいいですがとりあえず一つKtを作成します。
そして中身はこれ(ごめんコメント部分はあってるかどうか分からん)
これの使い方
親要素でもクリックイベントがほしい!!!ときにさっき書いたやつを使います
実際に起動させるとこんな感じになるはず
- ボタンも押した場合
- 親要素押したとき、子要素押したとき両方の時間が更新される
仕組み的ななにか
PointerInputScope.detectTapGestures
をほぼパクって作りました
PointerInputScope.detectTapGestures
から、
まだ消費されていないクリックイベントが来るまで待機サスペンド関数
を 消費されていてもクリックイベントが来るまで待つサスペンド関数 へ書き換えることで動かしています。
- 最初の
awaitFirstDown()
をawaitPointerEvent()
にすることで消費されていてもいいクリックイベントが来るまで待機
- 上記の理由から
event.changes.fastAll { it.changedToUp() }
を event.changes.all { it.changedToUpIgnoreConsumed() }
にしました
- onTap 以外は使わないので削除
終わりに
ソースコードです。
https://github.com/takusan23/JetpackComposeParentClickEvent