Анимации во Flutter: как проверить, завершена ли анимация?

Анимация играет решающую роль в создании визуально привлекательных и интерактивных пользовательских интерфейсов в приложениях Flutter. Разработчику важно иметь контроль над жизненным циклом анимации, в том числе знать, когда анимация завершена. В этой статье мы рассмотрим различные методы проверки завершенности анимации во Flutter, а также примеры кода.

Метод 1: использование AnimationController и AnimationStatusListener

AnimationController _controller;
void initState() {
  super.initState();
  _controller = AnimationController(
    duration: Duration(seconds: 2),
    vsync: this,
  );
  _controller.addStatusListener((status) {
    if (status == AnimationStatus.completed) {
      // Animation is complete
      print("Animation complete");
    }
  });
  _controller.forward();
}
void dispose() {
  _controller.dispose();
  super.dispose();
}

Метод 2: использование примеси AnimationListener

class MyWidget extends StatefulWidget {
  @override
  _MyWidgetState createState() => _MyWidgetState();
}
class _MyWidgetState extends State<MyWidget> with AnimationListener {
  AnimationController _controller;
  void initState() {
    super.initState();
    _controller = AnimationController(
      duration: Duration(seconds: 2),
      vsync: this,
    );
    _controller.addStatusListener((status) {
      if (status == AnimationStatus.completed) {
        // Animation is complete
        print("Animation complete");
      }
    });
    _controller.forward();
  }
  void dispose() {
    _controller.dispose();
    super.dispose();
  }
  void onAnimationComplete() {
    // Animation is complete
    print("Animation complete");
  }
  Widget build(BuildContext context) {
    return Container();
  }
}

Метод 3. Использование виджета AnimationBuilder

class MyWidget extends StatelessWidget {
  final AnimationController _controller = AnimationController(
    duration: Duration(seconds: 2),
    vsync: this,
  );
  Widget build(BuildContext context) {
    return AnimationBuilder(
      animation: _controller,
      builder: (BuildContext context, Widget child) {
        if (_controller.isCompleted) {
          // Animation is complete
          print("Animation complete");
        }
        return Container();
      },
    );
  }
}

В этой статье мы рассмотрели различные методы проверки завершенности анимации во Flutter. Используя AnimationController и AnimationStatusListener, миксин AnimationListener или виджет AnimationBuilder, вы можете легко определить, когда анимация достигает состояния завершения. Включение этих методов в ваши приложения Flutter позволит вам синхронизировать другие действия с вашей анимацией и обеспечить удобство взаимодействия с пользователем.