TextField で 'readOnly && !obscureText': is not true. で assert が出てしまう時

1873 ワード

事象

Flutter の TextField で下記のように

'readOnly && !obscureText': is not true.

assert で弾かれてクラッシュする時です。

結論

TextEditingController のカスタムクラスを作る際に
buildTextSpan メソッドをオーバーライドする際にタップの設定を行わないこと

ちょっと詳しく

buildTextSpan メソッドは TextSpan を戻り値にしていますが、その TextSpanchildren にタップイベントを含ませないようにしましょう。

原因

よくエラーを見ると GestureRecognizer あたりでエラーがあります。

RawGestureDetectorState.replaceGestureRecognizers.<anonymous closure> (package:flutter/src/widgets/gesture_detector.dart:1343:38)
RawGestureDetectorState.replaceGestureRecognizers (package:flutter/src/widgets/gesture_detector.dart:1355:6)

おそらく、TextField で編集ができる状態でタップイベントを実装してほしくないという SDK 側の意思があるのでしょう。
確かに文字入力しているときにタップイベントあれば鬱陶しいですからね・・・。

おしまい

需要あるかは分かりませんが、ググっても中々分からなかったので、備忘録で書いておきます。

ご紹介

技術書典で Flutterで作るアプリとゲームの融合 〜電卓騎士の開発Tips〜 を公開しています。
この書籍は Flutter でのちょっと変わった電卓の Tips を色々記載しています。無料ですので良かったら DL してください。

アプリ自体も無料で公開しています。