我想了解控制狀態窗口狀態之外的StatefulWidget狀態的最佳做法。從狀態控件外部控制狀態
我有下面的接口定義。
abstract class StartupView {
Stream<String> get onAppSelected;
set showActivity(bool activity);
set message(String message);
}
我想創建一個實現此接口的StatefulWidget StartupPage
。我期望Widget執行以下操作:
當按下按鈕時,它會通過onAppSelected流發送事件。一個控制器甚至可以監聽它並執行一些操作(數據庫調用,服務請求等)。
控制器可以調用
showActivity
或set message
使視圖顯示消息的進度。
因爲有狀態的Widget不公開是國家作爲一個屬性,我不知道用於訪問和修改國家的屬性的最佳方法。
我希望用這種方式會是這樣的:
Widget createStartupPage() {
var page = new StartupPage();
page.onAppSelected.listen((app) {
page.showActivity = true;
//Do some work
page.showActivity = false;
});
}
我想過通過傳遞,我希望它在createState()
返回狀態實例化組件,但是,感覺錯了。
爲什麼我們有這種方法的一些背景:我們目前有一個Dart web應用程序。對於視圖控制器分離,可測試性和對Flutter的前瞻性思考,我們決定爲應用程序中的每個視圖創建一個接口。這將允許WebComponent或Flutter Widget實現此接口並保持所有控制器邏輯相同。
如果這是一個合理的解決方案,讓StatefulWidget將它的狀態存儲在屬性中是否也是合理的? –
問題在於'createState()'是一個由flutter調用的生命週期方法,所以你不應該自己調用它並存儲返回的狀態。 – xqwzts
我用這種方法看到的問題是,它需要我們的通用控制器成爲Widget樹的一部分,這將違揹我們的設計目標,讓它們在Web上可重用。似乎Flutter強迫任何需要將小部件的狀態改變爲小部件本身的東西。 –