2017-05-04 39 views

答えて

0

あなたのウィジェットにはsetState()メソッドが必要です。このメソッドが呼び出されるたびに、ウィジェットは再描画されます。

Documentation : Widget setState()

+0

トップレベルウィジェット(ルート)の状態を置き換えるべきだと言っていますか?そのウィジェットにアクセスできない場合はどうすればいいですか? Flutterに本質的に再起動するよう伝えたい。 – DogeLion

+0

アプリ全体をリロードしますか? –

+0

私は、アプリケーションを強制的に(ビュースタックの深いビューを含む)再描画するようにしたい(タイトルが示すように)。そして私はこれをトリガーする場所から、ルートウィジェットにアクセスすることはできません。 – DogeLion

11

あなたは子供が読むことができるデータを持っていますが、明示的にすべてのあなたの子供のコンストラクタの引数にデータを渡したくないユースケースのこのタイプは、通常のために呼び出しますInheritedWidget。 Flutterは、どのウィジェットがデータに依存しているかを自動的に追跡し、変更されたツリーの部分を再構築します。ロケールの変更を処理するように設計されたLocaleQueryウィジェットがあり、その使用方法をStocks example appで確認できます。

  • をロケールの変更を処理するために(この場合は、StocksApp)ルートウィジェットにコールバックを置く:

    簡単に言うが、ここで何をしているか株式のです。このコールバックは、いくつかの作業を行い、その後、LocaleQuery.of(context)を使用するロケール情報を必要MaterialAppコンストラクタ

  • 子ウィジェットにonLocaleChanged引数としてこのコールバックを登録しますLocaleQueryData
  • のカスタマイズされたインスタンスを返します。
  • ロケールが変更されると、Flutterはロケールデータに依存するウィジェットのみを再描画します。

ロケールの変更以外のものをトラッキングする場合は、InheritedWidgetに拡張された独自のクラスを作成し、アプリのルート付近の階層に含めます。その親はStatefulWidgetで、子にアクセス可能な鍵はGlobalKeyに設定する必要があります。 StatefulWidgetStateは、配布するデータを所有し、setStateという名前の変更方法を公開する必要があります。子ウィジェットがStateのデータを変更したい場合は、グローバルキーを使用してStatekey.currentState)へのポインタを取得し、そのメソッドを呼び出します。データを読みたい場合は、サブクラスInheritedWidgetの静的of(context)メソッドを呼び出すことができ、StatesetStateを呼び出すたびにこれらのウィジェットを再構築する必要があることをFlutterに通知します。

+0

うわー、私は3回読んだ後、フラッターギャラリーの神社のサンプルコードを3回見てもまだ曖昧な理解しか持たなかった。これを試してみてください。 – hackingspirit

+0

この例はまだ在庫例にありますか? –

0

あなたの使用例では、ナビゲータを使用してページをリロードすると効果があります。私は私のアプリで "リアル"と "デモ"モードを切り替えるときにこれを行います。ここでは例を示します。

Navigator.of(context).push(
    new MaterialPageRoute(
     builder: (BuildContext context){ 
      return new SplashPage(); 
     } 
    ) 
); 

あなたはどんなメインウィジェット(または画面)あなたはリロードしたいと上記のコードでは、「()新しいSplashPage」を置き換えることができます。このコードは、UIのほとんどの場所にあるBuildContextにアクセスできる場所から呼び出すことができます。

関連する問題