8
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

【未解決】Samsung端末だとFlutterの文字入力がバグる案件

Last updated at Posted at 2020-01-16

#どういうバグなんですか?
入力してない文字がガンガン入ってくる
72007589-4020a180-320f-11ea-87fc-4393229842e8.gif
ソース元

#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,
)

###この対応が根本的な改善にならない理由

  1. 全部の TextField にこれ対応するの単純にキツイし漏れやすい
  2. 予測変換の禁止強制、ユーザビリティ最悪ですよねこれ
  3. 複数行入力に対応しようとすると
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時なので、安定版には多分まだ修正入ってない気がします。

8
5
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
8
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?