Для наиболее распространенного случая использования состояния приложения можно просто использовать StoreConnector
на любом экране, где вам нужно состояние.Вы уже используете его в своем классе Menu, но вы можете использовать его аналогичным образом в переопределении метода MySettingsScreen
.
Кроме того, ваши модели представлений создаются с использованием хранилища, поэтому идея заключается в том, чтобы вы включали всю информацию, которая требуется от хранилища, для построения представления при построении модели представления.Например:
class MyViewModel {
String myInfo;
factory MyViewModel.create(Store<AppState> store) {
return MyViewModel(myInfo: store.state.myInfoState);
}
...
}
Затем вы используете эту информацию из вашей модели представления:
@override
Widget build(BuildContext context) => StoreConnector<AppState, MyViewModel>(
converter: (Store<AppState> store) => MyViewModel.create(store),
builder: (BuildContext context, MyViewModel viewModel) {
return Text(viewModel.myInfo);
}
Вы можете использовать тот же механизм для сохранения ссылки на хранилище в модели представления:
class MyViewModel {
Store<AppState> myStore;
factory MyViewModel.create(Store<AppState> store) {
return MyViewModel(myStore: store);
}
...
}
Это позволяет вам использовать его непосредственно в вашем методе сборки:
@override
Widget build(BuildContext context) => StoreConnector<AppState, MyViewModel>(
converter: (Store<AppState> store) => MyViewModel.create(store),
builder: (BuildContext context, MyViewModel viewModel) {
return Text(viewModel.myStore.state.myInfo);
}
Обратите внимание, что первый шаблон может быть предпочтительным, если вы хотите сохранить логическое разделение между моделью представления и избыточностьюсохранение.