💨
JetpackCompose TextFieldにコピペしようとしてもできなくなるバグ
環境
composeVersion = 1.3.0
何が起きたか
タイトル通りではあるのですが、
TextFieldに一度ペーストした後
再度コピペしようとしても全く反応しなくなって
コピペができなくなるというバグがありました。
こちらのissueでも似たような症状が上がっていて、
これはどうしようもないものなのかと思っていたのですが、
コピペできる画面とできない画面の両方が存在したので
何かが違うと思い調査してみました。
しかし、
コードの見た目はほぼ同じでどうしたもんかとなってました.......
結論
TextFiledに渡す値は生の型以外の場合
@Stableをつけないとコピペできなくなるということがわかりました。
解説
解説というほどでもないのですが、
コピペできる画面とできない画面での違いをよく見てみると
TextFieldに渡している値が
data class経由で渡しているものと
interfaceを渡しているものの二種類があり、
interfaceの方には@Stableが付いていなかったので
もしやと思って試した結果判明した形になります。
@Stable
data class Hoge(
val textFieldEntity: TextFieldEntity
)
interface TextFieldEntity {
fugafuga.......
}
// みたいな感じ
一応念のために全てに@Stableもしくは@Immutableを付けることで対応しましたが
よく考えるとCompose側が直接参照するガワにだけアノテーションがあれば
あとは良しなにしてくれるような気がしています。
理由としては@Stableを持ったdata classの先の値は
アノテーションを持っていないことが殆どなので
全てに無いと動かないのであればもっと前に気づくようなバグが起きていても
おかしくないなぁと思ったからです(ふんわりとした推測)
Discussion