Я пытаюсь понять наилучшую практику для управления состоянием StatefulWidget за пределами этого состояния Widgets.
У меня есть следующий интерфейс.
abstract class StartupView {
Stream<String> get onAppSelected;
set showActivity(bool activity);
set message(String message);
}
Я хотел бы создать StatefulWidget StartupPage
который реализует этот интерфейс. Я ожидаю, что Widget сделает следующее:
-
Когда кнопка нажата, она отправляет событие поверх потока onAppSelected. Контроллер будет слушать это ровно и выполнять некоторые действия (вызов db, запрос службы и т.д.).
-
Контроллер может вызвать
showActivity
илиset message
чтобыset message
показывало ход с сообщением.
Поскольку виджет Stateful не раскрывает это состояние как свойство, я не знаю лучшего подхода к доступу и изменению атрибутов состояния.
То, как я ожидал бы использовать это, будет примерно таким:
Widget createStartupPage() {
var page = new StartupPage();
page.onAppSelected.listen((app) {
page.showActivity = true;
//Do some work
page.showActivity = false;
});
}
Я подумал о создании экземпляра Widget, передав в состояние, в котором я хочу, чтобы он возвращался в createState()
но это кажется неправильным.
Некоторые сведения о том, почему мы имеем такой подход: в настоящее время у нас есть веб-приложение Dart. Для разделения контроллеров View-Control, тестирования и передового мышления в отношении Flutter мы решили создать интерфейс для каждого вида в нашем приложении. Это позволило бы WebComponent или Flutter Widget реализовать этот интерфейс и оставить все логики контроллера одинаковыми.