Я работаю над Stateful Widget во Flutter и его частью расширения. Проблема, с которой я сталкиваюсь, заключается в том, что значение, которое я передаю в свой виджет с сохранением состояния, перезаписывается, потому что мне нужно установить какое-то значение, чтобы сделать Flutter счастливым.
Мой виджет с отслеживанием состояния сначала получает такие данные:
class TranslateOnHoverRight extends StatefulWidget {
final Widget child;
final double movement;
TranslateOnHoverRight({Key key, this.child,this.movement}) : super(key: key);
@override
_TranslateOnHoverRightState createState() => _TranslateOnHoverRightState();
}
Требуется виджет и dobule.
Затем у меня есть класс _TranslateOnHoverRightState, который выглядит следующим образом, и здесь, где я не все понимаю правильно.
class _TranslateOnHoverRightState extends State<TranslateOnHoverRight> {
final nonHoverTransform = Matrix4.identity();
final hoverTransform = Matrix4.identity()..translate(_movement, 0, 0);
bool _hovering = false;
static double _movement = 0;
@override
Widget build(BuildContext context) {
return MouseRegion(
onEnter: (e) => _mouseEnter(true,widget.movement),
onExit: (e) => _mouseEnter(false,0),
child: AnimatedContainer(
duration: const Duration(milliseconds: 200),
child: widget.child,
transform: _hovering ? hoverTransform : nonHoverTransform,
),
);
}
void _mouseEnter(bool hovering,double move) {
setState(() {
_hovering = hovering;
_movement = move;
});
}
}
Вверху я передаю _movement
моей переменной hoverTransform
и устанавливаю ее на ноль.
Теперь в моей функции Widget build
я возвращаю MouseRegion, который имеет onEnter
использовать мою функцию _mouseEnter
, которая принимает параметры boolean и double из виджетов в параметре widget.movement
. Идея заключается в том, что теперь при наведении курсора мыши должно происходить движение, но ничего не происходит.
В моей функции _mouseEnter
я передаю значение true или false, а значение отправляется из виджета и передает его моему * 1022. * переменная выглядит так:
void _mouseEnter(bool hovering,double move) {
setState(() {
_hovering = hovering;
_movement = move;
});
}
И в конце все используется как расширение как это:
Widget mouseRightOnHover(double moveIt) {
return TranslateOnHoverRight(
child: this,
movement: moveIt,
);
}