Преобразуйте анимацию FadeTransition в flutter_hooks, верна ли эта реализация?

Пытаясь преобразовать анимацию виджета с отслеживанием состояния в реализацию флаттер-хуков, я хотел бы знать, правильно ли я это делаю.

Это мой SatatefullWidget:

class FadeTransitionGlow extends StatefulWidget {
  @override
  State<StatefulWidget> createState() => _Fade();
}

class _Fade extends State<FadeTransitionGlow> with TickerProviderStateMixin {
  AnimationController animation;
  Animation<double> _fadeInFadeOut;

  @override
  void initState() {
    super.initState();
    animation = AnimationController(
      vsync: this,
      duration: Duration(seconds: 1),
    );
    _fadeInFadeOut = Tween<double>(begin: 0.0, end: 1.0).animate(animation);

    animation.addStatusListener((status) {
      if (status == AnimationStatus.completed) {
        animation.reverse();
      } else if (status == AnimationStatus.dismissed) {
        animation.forward();
      }
    });
    animation.forward();
  }

  @override
  Widget build(BuildContext context) {
    return FadeTransition(
        opacity: _fadeInFadeOut,
        child: Container(
          color: Colors.red,
          width: 200.0,
          height: 200.0,
        ));
  }
}

Вот моя реализация flutter_hook:

class _HookFade extends HookWidget {
  @override
  Widget build(BuildContext context) {
    var controller =
        useAnimationController(duration: Duration(milliseconds: 500));

    Animation<double> _fadeInFadeOut =
        Tween<double>(begin: 0.0, end: 1.0).animate(controller);

    controller.addStatusListener((status) {
      if (status == AnimationStatus.completed) {
        controller.reverse();
      } else if (status == AnimationStatus.dismissed) {
        controller.forward();
      }
    });
    controller.forward();

    return FadeTransition(
        opacity: _fadeInFadeOut,
        child: Container(
          color: Colors.red,
          width: 200.0,
          height: 200.0,
        ));
  }
}

Любой совет по улучшению, если он не является правильным, очень хорошо. Большое спасибо.

0 ответов

Другие вопросы по тегам