У меня есть StatefulWidget
по имени BounceContainer
. Этот класс содержит параметр child
как типичный виджет Flutter. По сути, он отскакивает child
всякий раз, когда пользователь нажимает на него. На данный момент я передаю параметр ребенок следующим образом:
class BounceContainer extends StatefulWidget {
final Widget child; // Declaring "child"
BounceContainer({this.child}); // Initializing "child"
// Passing "child" to State
@override
_BounceContainerState createState() => _BounceContainerState(this.child);
}
class _BounceContainerState extends State<BounceContainer> {
Widget child;
_BounceContainerState(this.child); // Receiving "child"
@override
Widget build(BuildContext context) {
...
}
}
Проблема в данном случае в том, что даже если параметр child
изменится, сам ребенок не обновится.
Например, если у меня есть кнопка, цвет которой меняется с серого на любой случайный цвет в зависимости от AnimationController
, и я передаю эту кнопку в качестве параметра child
классу BounceContainer
, кнопка по-прежнему остается серой и вызывает setState()
(либо из основной программы, либо из класса BounceContainer
) также не заставляет обновлять виджет ребенок.
Как правильно (а также эффективно) решить эту проблему?
@siega Спасибо, это сработало для меня! ✌
@siega это хорошая практика? Я использую его так часто, но не знаю побочных эффектов этого
Я думаю, что самым большим преимуществом здесь является сокращение кода. В противном случае, если у вас есть 10 параметров, вам нужно создать 10 свойств в состоянии и передать все эти значения через конструктор. @dubace
Вам не нужно передавать все свои параметры классу State. Вы можете получить к ним доступ с помощью widget.child
Вам не нужно передавать все свои параметры классу State. Вы можете получить доступ с помощью
widget.child
.