Flutter:不定期にNull check operator used on a null valueが出る(getRootWidgetSummaryTree関連)
結論:Flutter PerformanceのTrack widget rebuildsのチェックを外す
2022/10/9 Flutter エラー・バグ日記
いつの間にか、デバッグモードでの実行中に、コンソール画面に以下のエラーが出るようになった。
The following _CastError was thrown during a service extension callback for "ext.flutter.inspector.getRootWidgetSummaryTree": Null check operator used on a null value When the exception was thrown, this was the stack: #0 WidgetInspectorService._registerObjectGroupServiceExtension.<anonymous closure> (package:flutter/src/widgets/widget_inspector.dart:796:84) #1 WidgetInspectorService._registerObjectGroupServiceExtension.<anonymous closure> (package:flutter/src/widgets/widget_inspector.dart:795:17) #2 BindingBase.registerServiceExtension.<anonymous closure> (package:flutter/src/foundation/binding.dart:602:32) <asynchronous suspension>
「Null check operator used on a null value」とのこと。
どの変数がNullになったのか分からないため、いつも対処に苦労するエラー。
単純なnull safetyの対応漏れ・考慮漏れであれば良いのだが、今回実行していたアプリはシンプルな内容で、null safetyの対応に問題はないことを確認していた。。
発生が不定期で、アプリは落ちない
具体的な状況としては、アプリ内に設置したボタンを押すと、setStateで全体を再描画する仕様になっており、このボタンを押したときにエラーが発生するというもの。
厄介なのは、エラーが起きるときと起きないときがあり、発生が不定期である点。
何も条件が変わらないのに、ボタンを複数回押していると、突然エラーが発生するので、原因を特定しづらい。。
一方、エラーが発生してもアプリが落ちることはなく、引き続き動作できている。
リリースモードで実行すれば特段問題はないので、放置しても良い気はするが、やや気持ち悪い。。
Android Studioの設定が問題らしい
エラーメッセージを読んでも、ヒントになるキーワードが見つからず、意味がわからない。。
仕方なく、エラーの最初の1文でググってみると、ズバリのイシューが上がっていた。
自分と全く同じエラーが報告されており、まだオープン中(未解決)の模様。
TextFieldの入力中に発生することが報告されているが、Flutterの担当者の方が、再現できないと回答している。
しかし、最後の方のやり取りを見ると、Android Studioにおいて、動作中の負荷状況を確認できる「Flutter Performance」のタブで、「Track widget rebuilds」にチェックをしていると発生するので、チェックを外せば解消すると書かれていた。
思い出したが、つい最近、Widgetの再描画状況や、負荷状況を確認するために、「Flutter Performance」のタブの「Track widget rebuilds」にチェックを入れていた。
早速チェックを外してみると、確かにエラーが発生しなくなった!
どうやら再描画時の負荷状況をチェックする動作に、一部、不具合がある模様(なので、イシューがオープン中なのだろう)。。
推察ではあるが、上記イシューで報告されているTextField関連のエラーについても、TextEditingControllerが、ChangeNotifierの拡張クラスなので、テキスト入力すると再描画が起こることで、同様のエラーが発生したのではないかと思われる。
過去に、Breakpointの設定が原因でエラーが生じたことがあったので、コーディングの内容ではなく、Android Studioの設定関係が原因でエラーになる場合があることを改めて認識。
\一般的なエラー対処法をまとめた記事はこちら/
リリースしたアプリ(全てFlutterで開発)
個人アプリ開発で役立ったもの
おすすめの学習教材
\超初心者向けでオススメな元Udemyの講座/
\キャンペーン時を狙えば安価で網羅的な内容が学べる(日本語訳あり)/
\Gitの基礎について無料で学べる/
おすすめの学習書籍
\実用的。image_pickerに関してかなり助けられた/
\Dartの基礎文法を素早くインプットできる/