Flutter: разница в инициализации переменных в классе

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

class Person {
  String name = "John";

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

против

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

Всего 2 ответа


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

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


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

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

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


Есть идеи?

10000