После этого вопроса я понимаю, почему < strong> StatefulWidgets действительно имеет смысл в контексте приложения флаттера на основе Redux. И это то, чего я тоже пытаюсь достичь -
Страница, которая получает информацию из состояния всего приложения (зарегистрированные данные пользователя, данные API и т. д.), а также может отправлять действия из подключенной модели ViewModel, но та, которая ТАКЖЕ содержит виджеты с отслеживанием состояния с меньшей областью действия, кратковременным состоянием. такие вещи, как анимация, проверка пользовательского ввода на лету перед отправкой и изменение пользовательского интерфейса на основе действий пользователя.
Так что меня интересует, как это сделать, и я надеюсь, что кто-то здесь может мне помочь. В настоящее время все мои страницы представляют собой виджеты без сохранения состояния, подключенные к состоянию приложения через хранилище следующим образом:
class LoginPage extends StatelessWidget {
final String TAG = "LoginPage";
bool isGreen = false;
LoginPage({Key key}) : super(key: key);
void changeColor() {
isGreen = !!isGreen;
}
@override
Widget build(BuildContext context) {
/// [StoreConnector] is used to convert store data (using the fromStore)
/// into a ViewModel suitable for the page.
return StoreConnector<AppState, LoginPageViewModel>(
builder: (context, viewModel) {
return Scaffold(
body: Column(
children: <Widget>[
Container(...),
Text(
text: viewModel.some_value_from_the_store,
color: isGreen ? Colors.green : Colors.red,
),
ElevatedButton(
onPressed: () => changeColor(),
child: Text('Press to change color'),
)
],
));
},
converter: LoginPageViewModel.fromStore);
}
}
Здесь я просто пытаюсь просто изменить цвет текста внутри виджета LoginPage на основе щелчков пользователя, оставаясь при этом подключенным к магазину, чтобы пользовательский интерфейс продолжал обновляться с новой информацией о состоянии приложения по мере ее поступления.
Есть ли там ссылка на что-то подобное? может ли кто-нибудь привести пример или просто основные рекомендации, как этого добиться? кажется простым, но я борюсь с этим.