#どういうバグなんですか?
入力してない文字がガンガン入ってくる
ソース元
#Q.一般開発者に出来る対応は? A.ほぼ無い
マジで勘弁してください(白目
##バグの発生原因
Samsung端末の 予測変換 機能に問題があるとのこと。
OS周辺のブラックボックスに起因しているのがキツい
##英数字限定のTextFieldにだけ使える対応
予測変換がバグの温床なんだから、予測変換使わなきゃいいじゃん?
ということで、そういう設定の仕方があるみたいです。
1.まず device_info ライブラリをインストールします
https://pub.dev/packages/device_info
2.こういう感じでサムスン端末判定を行う
bool samsungKeyboard = false;
if (Platform.isAndroid) {
var info = await DeviceInfoPlugin().androidInfo;
samsungKeyboard =
(info?.manufacturer?.toLowerCase()?.contains("samsung") ?? false);
} else {
samsungKeyboard = false;
}
3.サムスン端末判定で keyboardType の設定を変える
TextField(
keyboardType: samsungKeyboard ?
TextInputType.visiblePassword :
TextInputType.emailAddress,
autoFocus: false,
)
###この対応が根本的な改善にならない理由
- 全部の TextField にこれ対応するの単純にキツイし漏れやすい
- 予測変換の禁止強制、ユーザビリティ最悪ですよねこれ
- 複数行入力に対応しようとすると
TextField(
keyboardType: TextInputType.multiline,
maxLines: null,
)
を設定する必要がある(引用元)ので、keyboardTypeが重複して駄目
という感じで、現実的にどうにもならないです。
#Flutter公式側の動向
https://github.com/flutter/flutter/issues/42273
対応自体は行ってくれているみたいですが、2020/01/16現在、
対応マイルストーンは2020年の2月および5月とそれなりに長めの設定。
微妙に遠いなぁ……(遠い目
2020/4/2にmasterブランチにマージされたようです。
で、同日にhotfix9がリリースされてますが……
マージが午前10時で、通知ツイートが午前8時なので、安定版には多分まだ修正入ってない気がします。