デバッグ時に発生するListen多重化 2024/02/17
DBの処理周りを修正するなかで、やっかいな問題が発覚。
Firebase RealtimeDatabaseで特定項目の変化をlistenしているのだが、FlutterでHotReloadすればするほどlistenが多重化してしまうことが分かった。
まずそこに気づくまで時間がかかった。
dispose()でStreamを閉じても適切に破棄されないため、HotReloadの時にさらにListenしてしまうようだ。デバッグのとき何度もHotReloadすると、その回数分だけLitenが多重化してカオスになる。
これは辛い。
調べたがWebで開発する場合あまり明確な対応方法は無さそうで、都度Webページのリロード(F5)をしてやりくりするしかなさそう。
- [web] WebSocketStream is not closed on HotRestart · Issue #78212 · flutter/flutter · GitHub
- [doc] Explain how hot-restart works and why deactivate (dispose) not called on hot restart #69949
※2024/10/28時点で確認したところワークアラウンドのコメントは付いていますが、IssueとしてはOpenのままです
※開発日記は当時の記録をもとに作成し、必要に応じて加筆・補足しています
この記事はアイディア整理ソフト「idea Lane」の開発記録です
↓どなたでも、ユーザ登録だけで無料ですぐに使えます↓
テキストベースの思考整理ツール「idea Lane」
コメント