冬休み明けから2ヶ月ぐらい経ったので。大体2〜3ヶ月ごとにまとめていきたい。
PRの増減
2ヶ月の間にマージされたPRは1つ 、追加したPRは2つです。 レビュー中のPRが4~5個の状態になっているので、キャパシティ的に新しいものを作成するのは控えていました。
手元でちょっとやってるのはあります。いろいろな事情でたくさんやるというより、気になるものをやっていく方が良さそう。
マージされたPR
Flutter Webにおいて、日本語の文字入力に関するPRです。一番最後に取り組んだのと、論点多いから時間かかるかな……と思っていたら、一番最初にマージされました。 その上、Breaking Changeも含めての対応となりました。影響デッカ……。
修正の本質としては、framework上のテキスト入力とflutter engineの間で必要な情報が不足していたというものになります。描画している文字のサイズと、想定している文字のサイズがずれたら、まあ選択範囲とかズレますよねって感じ。
文字入力をPlatformView経由にするプランなどもあるのですが、おそらく、今回の対応は必須になるはずです。というか、ちゃんと渡せていないとPlatformView上で想定外の表示になってしまうはず。そういう意味で、早いタイミングでマージできたのは良かったんじゃないかなと思っています。
飛び道具で問題を一気に解決できる提案は魅力的。とはいえ現時点で修正できるものをしないといけない気がするなぁ、ってなってます。
新規追加のPR
Breaking Changeを作ったので、マイグレーションガイドを追加しました。めっちゃ緊張してます。 とはいえ、参照する必要がある人はごく一部なので、多分困ることはないはず……! *1
Flutter 3.41に1つだけPRがマージされているのですが、そのPRがデグレを引き起こしている……!? ということで、急ぎ修正PRを作りました。大変申し訳ないのと、大変悔しい。
言い訳っぽくなっちゃうのですが、iOSのキーボードを制御するのがすごく難しいです。というのもFlutterのTextInput周りのAPIは、キーボードをAPI経由で制御しやすいAndroidベースになっている印象です。というか、iOSのキーボードはAPI経由で制御されることを全く考慮していません。
このため、Autofillのプロンプトを表示するためには、TextFieldをremoveFromSuperviewする必要があります。TextFieldを表示している画面から遷移する動きをシミュレートしている、と理解しています。API経由での呼び出しというより、APIを組み合わせて状況を再現している感じです。
https://developer.apple.com/documentation/SwiftUI/TextField)
removeFromSuperview() | Apple Developer Documentation
結果、Autofillの動作を適切に発火するにはremoveFromSuperviewを呼び出す必要があるのですが、これは通常のAutofillをしないケースであれば文字入力を完了したケースでも必要です。その上、FlutterのAPIとしては「キーボードを表示する」と「キーボードを隠す」もAPI的に提供しているため、showとhideの概念も存在します。さらに「文字入力のconnectionを保ったまま、キーボードの表示と非表示を切り替える3rd partyのeditorパッケージ」も存在するため、そのケースを破壊しないようにする必要もあります。 *2
show method - TextInputConnection class - services library - Dart API
https://api.flutter.dev/flutter/services/TextInputConnection/hide.html
そんなこんながあったPRでした。レビューが進んでいるので、LGTMとなればhotfixに含まれると思います。よろしくお願いします。
感想
年末を挟んだことと、おそらくAIの活用によるコントリビューションの増加により、レビューに時間がかかるようになっている印象です。個人的にはbaselineを修正したPRがCJK圏だと重要だし、『このissueも直る?』と調査依頼があったのでSkiaの問題であることを突き止めたりしたので、早く対応されると嬉しいな……! と思っています。
3つぐらいに減ったら、次のPRを考えたいです。これは趣味ですからね。