В настоящее время я назначаю все переменные через 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 () только тогда, когда вам нужно.