Как установить initialState из общих настроек?

#redux #dart #flutter #sharedpreferences

#сокращение #dart #флаттер #sharedpreferences

Вопрос:

Я пытался добавить redux в свое приложение flutter

Я хочу установить тему MaterialUI на основе общих настроек пользователя

 void main() {
  final store = Store<AppState>(
    reducer,
    initialState: AppState.initialState(),
  );

  runApp(MyApp(store: store));
}
  

У меня есть эта функция, которая возвращает, какие пользовательские настройки

   static Future<String> getActiveTheme() async {
    final SharedPreferences prefs = await SharedPreferences.getInstance();
    return prefs.getString(_activeTheme) ?? "Light";
  }
  

и мое AppState выглядит следующим образом

 class AppState {
  String theme;
  User user;

  AppState(this.theme, this.user);

  AppState.initialState()
      : theme = 'Light',
        user = null;
}

  

Я бы хотел вместо theme: 'Light' получить theme: getActiveTheme()

Заранее спасибо

Комментарии:

1. Вам следует рассмотреть состояние инициализации, в котором вы можете получить это String и ожидать его, прежде чем передавать его в AppState

Ответ №1:

Что вы хотите сделать, так это загрузить тему как часть вашего main метода. Затем вы можете передать тему, которую вы загрузили, в свои AppState конструкторы. Не то, чтобы я добавил async в ваш main метод, и перенес настройку theme на ваш AppState в параметры.

 void main() async {

  var theme = await getActiveTheme();

  final store = Store<AppState>(
    reducer,
    initialState: AppState.initialState(theme),
  );

  runApp(MyApp(store: store));
}

class AppState {

  // ...

  AppState.initialState(this.theme)
      : user = null;
}