問題タブ [statelesswidget]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
dart - Flutter: StatelessWidget.build が複数回呼び出されました
私はいつもここで質問にコードを入れていますが、バグは何千行ものコードのどこかにある可能性があるため、今回は不可能です。でも:
StatelessWidget
(ホーム プロパティ)の子孫であるメイン画面のビルド メソッド ( ) は、MaterialApp
通常どおり、デバッグ モードでは 1 回呼び出されますが、リリース モードでは 3 回呼び出されることに気付きました。
どのような状況で、このようなことが起こり得るのでしょうか? すでに何度か再現を試みましたが失敗しました。
編集:
問題は、メディアクエリから取得した画面サイズをグローバル変数として保存しているため、どこからでもアクセスできることです。ここで、ツリーのさらに下にあるステートフル ウィジェットの init メソッド内でその変数にアクセスする必要があります。デバッグ モードでは問題ないようですが、リリース モードでは、メディア クエリ (ビルド内にある必要があります) を作成するウィジェットのビルド メソッドが 1 回呼び出され、メディア クエリの結果は Size(0.0, 0.0) になります。 、次に、ツリーのさらに下にあるウィジェットの init メソッドが呼び出され、次にメディア クエリを含む build メソッドがさらに 2 回呼び出されます (今回は正しい画面サイズで)。その結果、init メソッド内で正しい画面サイズが得られません。
dart - ステートレス ウィジェットは独自に破棄しますか?
ブロック パターンの実装をテストするために使用するPostUpdaterWidget
拡張を作成しました。StatelessWidget
TextEditingControllers
多くの例で、コントローラーを破棄する必要があることを見てきました。ただし、 a には関数へのメソッドはありoverride
ませdispose
んStatelessWidget
。
使用されているコントローラーを破棄する独自の破棄関数を作成し、このウィジェットを使用するユーザーのためにこのウィジェットの変数を作成して、破棄関数を呼び出せるようにすることを考えました。
しかし、私が本当にそれを行う必要があるのか、それともこの StatelessWidget が実際に独自に処理するのかを最初に知りたいのです。
自分の考えを進めるべきですか?または、これらのコントローラーを独自に破棄する可能性があるため、そのままにしておきます。これにより、メモリリークを心配する必要がなくなります。