Переменная в классе не обновляется при изменении значения - PullRequest
0 голосов
/ 05 мая 2020

У меня есть переменная с именем number и класс, который устанавливает переменную в number в своем конструкторе. Затем я изменяю значение number, но number в классе не обновляется. Вот мой код:

void fn1() {
  int number = 5;
  SomeClass someClass = SomeClass(number);
  // Do some other things which take a long time
  number = 2;
  someClass.printer(); // prints 5. expect 2
}

class SomeClass {
  int nestedNum;

  SomeClass(this.nestedNum) {
    printer();
  }

  void printer() {
    print(nestedNum);
  }
}

Как я могу получить nestedNum для обновления в любое время number изменяется?

Таким образом, хакерское / простое решение будет в любое время, когда я изменю number в fn1, мне нужно изменить nestedNum в someClass: вот так: someClass.nestedNum = 2. Проблема в том, что если у меня есть несколько классов, мне придется go через каждый, чтобы изменить переменную.

Другое решение, о котором я подумал, заключалось в том, чтобы никогда не передавать number в someClass, но вместо этого передайте this и получите доступ к number, используя this. Проблема снова в том, что если у меня есть несколько классов, каждому из которых требуется доступ к другой переменной из fn1.

1 Ответ

0 голосов
/ 05 мая 2020

Единственный способ изменения nestedNum при изменении number - это позволить nestedNum читать из number. Dart не позволяет передавать ссылки или указатели на переменные. Что вы можете сделать, так это передать функцию в SomeClass, которая будет предоставлять значение каждый раз, когда это необходимо.

void fn1() {
  int number = 5;
  SomeClass someClass = SomeClass(() => number);
  // Do some other things which take a long time
  number = 2;
  someClass.printer(); // prints 2!
}

class SomeClass {
  final int Function() _nestedNum;
  int get nestedNum => _nestedNum();

  SomeClass(int Function() nestedNum) : _nestedNum = nestedNum {
    printer();
  }

  void printer() {
    print(nestedNum);
  }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...