Эффективно обновлять последовательность переменных в setState() (дротик-флаттер)

#flutter #dart

#флаттер #дротик

Вопрос:

Я не могу найти простой способ обновить ряд переменных в моем проекте Flutter. Сначала я попытался использовать перечисления и функции для изменения переменных внутри setState((){}) вызова. У меня есть что-то вроде этого:

   void changeMode(Mode mode) {
if (mode == Mode.start) {
  print('App is now in start mode');
  mode = Mode.start;
  bool1 = true;
  bool2 = false;
  bool3 = false;
  color1 = kAColor1;
  color2 = kAColor2;
} else if ...}
  

Но ничего не обновляется, я полагаю, это связано с тем, что моя функция ничего не возвращает.

Если я жестко закодирую каждую отдельную переменную в setState((){}) , это будет работать нормально, но это абсолютно неэффективно и беспорядочно для исправления.

Может быть, мне следует использовать классы? Нужно ли мне создавать суперкласс, содержащий все подклассы, чтобы сделать что-то подобное?

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

1. Вы пытались напечатать значения, которые вы передавали этим переменным?

2. Выполняется начальная инструкция print, но переменные не изменяются

Ответ №1:

Каждый раз, когда вы вызываете setState, ваш пользовательский интерфейс будет перестраиваться. Вы можете использовать class или map для манипулирования вашими данными.

С помощью класса:

 setState(() {
  currentData = actualData.copyWith(bool1: false)
})
  

Таким образом, вы изменяете только те данные, которые отличаются от currentData . В этом примере я сохраняю всю информацию из currentData и изменяю только bool1 значение.

Obs: copyWith это factory , которые возвращают тот же тип currentData .