Расширение Flutter и Stateful Widget в Flutter - PullRequest
0 голосов
/ 13 апреля 2020

Я работаю над 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,
    );
}
...