問題タブ [flutter-widget]

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.

0 投票する
4 に答える
64411 参照

flutter - Flutter:継承されたウィジェットを正しく使用するには?

InheritedWidget を使用する正しい方法は何ですか? これまでのところ、Widget ツリーにデータを伝播する機会が得られることを理解しました。極端に言えば、RootWidget として配置すると、すべてのルートのツリー内のすべてのウィジェットからアクセスできるようになります。これは、グローバルやシングルトンに頼ることなく、ビューモデル/モデルをウィジェットでアクセスできるようにする必要があるためです。

しかし、 InheritedWidget は不変なので、どうすれば更新できますか? さらに重要なのは、ステートフル ウィジェットがサブツリーを再構築するためにどのようにトリガーされるかです。

残念ながら、ここのドキュメントは非常に不明確であり、多くの議論の後、誰もそれを使用する正しい方法を本当に知らないようです.

Brian Egan からの引用を追加します。

はい、データをツリーに伝播する方法だと思います。APIドキュメントから、私が混乱していること:

「継承されたウィジェットがこの方法で参照されると、継承されたウィジェット自体の状態が変化したときにコンシューマーが再構築されます。」

これを最初に読んだとき、私は次のように思いました。

InheritedWidget にいくつかのデータを詰め込み、後で変更することができます。その変更が発生すると、InheritedWidget を参照するすべてのウィジェットが再構築されます。

InheritedWidget の State を変更するには、それを StatefulWidget にラップする必要があります。その後、実際に StatefulWidget の状態を変更し、このデータを InheritedWidget に渡します。InheritedWidget はデータをすべての子に渡します。ただし、その場合、InheritedWidget を参照する Widgets だけでなく、StatefulWidget の下にあるツリー全体を再構築するようです。あれは正しいですか?それとも、updateShouldNotify が false を返した場合に、InheritedWidget を参照するウィジェットをスキップする方法をどうにかして知っていますか?