Флаттер: разница в инициализации переменных в классе - PullRequest
0 голосов
/ 20 ноября 2018

В настоящее время я присваиваю все переменные через initState, однако вижу, что нет необходимости присваивать переменные через initState, так как я могу просто присвоить переменную со значением напрямую. Каков порядок этих назначений и чем они отличаются? Почему и когда бы вы выбрали один вместо другого?

class Person {
  String name = "John";

  @override
  void initState(){
  ....
  ....
  }
}

против

class Person {
  String name;
  @override
  void initState(){
    name = "John";
  }
}

Ответы [ 2 ]

0 голосов
/ 20 ноября 2018

Разница в том, что первой переменной нельзя назначить динамическое содержимое, как, например, AnimationController(vsync: this), вы должны сделать это в initState.

Я полагаю, что назначение initState немного снижает производительность, потому что у вас есть больше возможностей.

Я бы рекомендовал использовать регулярное назначение переменных, когда это возможно, и использовать initState () только тогда, когда это возможно.ты должен.

0 голосов
/ 20 ноября 2018

В вашем первом примере назначение происходит во время строительства. Вы можете использовать эту форму, если name - final.

Во втором примере присваивание происходит при вызове initState, что может быть нулем, один или несколько раз. Предположительно, вы имеете в виду initState из State<T>, который фреймворк вызывает один раз, после построения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...