私は、そのウィジェット状態の外でStatefulWidgetの状態を制御するためのベストプラクティスを理解しようとしています。StatefulWidgetの外部からの状態の制御
以下のインターフェイスが定義されています。
abstract class StartupView {
Stream<String> get onAppSelected;
set showActivity(bool activity);
set message(String message);
}
私は、このインタフェースを実装StatefulWidget StartupPage
を作成したいと思います。
ボタンを押すと、onAppSelectedストリームを介してイベントが送信されます。コントローラーはこれを聞いて、何らかのアクション(dbコール、サービス要求など)を実行します。
コントローラーは、
showActivity
またはset message
と呼んで、ビューで進行状況を示すメッセージを表示できます。
ステートフルウィジェットはプロパティとして状態を公開しないため、状態の属性にアクセスして変更するための最良の方法はわかりません。私はそれがcreateState()
に戻したい状態に渡すことで、ウィジェットをインスタンス化について考えてきましたが、それは間違っていると感じ
Widget createStartupPage() {
var page = new StartupPage();
page.onAppSelected.listen((app) {
page.showActivity = true;
//Do some work
page.showActivity = false;
});
}
:私はこれを使用することを期待する
方法は何かのようになります。
このアプローチを採用した背景についてのいくつかの背景:現在、ダーツのWebアプリケーションがあります。 View Controllerの分離、テスト容易性、そしてFlutterに向けての前向きな思考のために、我々はアプリケーションの各ビューのインターフェースを作成することに決めました。これにより、WebComponentまたはFlutterウィジェットがこのインタフェースを実装し、すべてのコントローラロジックを同じにすることができます。
これは妥当な解決策であれば、StatefulWidgetに状態をプロパティに格納させることも妥当でしょうか? –
'createState()'はflutterによって呼び出されるライフサイクルメソッドなので、あなた自身で呼び出して返された状態を保存するべきではないという問題があります。 – xqwzts
このアプローチで見られる問題は、ジェネリックコントローラがWeb上で再利用できるという設計目標に反するウィジェットツリーの一部であることが必要であるということです。 Flutterは、ウィジェット自体の状態を変更する必要があるものを強制しているようです。 –