Поднимите свою кнопку Flutter: как анимировать круглый загрузчик

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

Метод 1: собственный контроллер анимации

Первый метод предполагает использование специального контроллера анимации для управления анимацией. Вот пошаговое руководство:

  1. Создайте StatefulWidget: начните с создания нового StatefulWidget, который будет хранить состояние анимации кнопки.
class AnimatedButton extends StatefulWidget {
  @override
  _AnimatedButtonState createState() => _AnimatedButtonState();
}
  1. Определите контроллер анимации. Внутри класса состояния определите контроллер анимации и Tween, которые будут анимировать свойства кнопки.
class _AnimatedButtonState extends State<AnimatedButton> with SingleTickerProviderStateMixin {
  AnimationController _animationController;
  Animation<double> _animation;

  @override
  void initState() {
    super.initState();
    _animationController = AnimationController(
      vsync: this,
      duration: Duration(milliseconds: 1000),
    );
    _animation = Tween<double>(begin: 0, end: 1).animate(_animationController);
  }

  @override
  void dispose() {
    _animationController.dispose();
    super.dispose();
  }
}
  1. Создание пользовательского интерфейса. В методе сборки используйте виджет AnimatedBuilder, чтобы обернуть кнопку с повышенными правами. Внутри функции компоновщика обновите свойства кнопки на основе значения анимации.
@override
Widget build(BuildContext context) {
  return AnimatedBuilder(
    animation: _animationController,
    builder: (BuildContext context, Widget child) {
      return ElevatedButton(
        onPressed: () {
          // Add your button logic here
        },
        child: child,
        style: ElevatedButton.styleFrom(
          shape: RoundedRectangleBorder(
            borderRadius: BorderRadius.circular(50 * _animation.value),
          ),
        ),
      );
    },
    child: CircularProgressIndicator(),
  );
}
  1. Запуск анимации. Чтобы запустить и остановить анимацию, вызовите соответствующие методы контроллера анимации.
void _startAnimation() {
  _animationController.repeat();
}
void _stopAnimation() {
  _animationController.stop();
}

Метод 2: AnimatedContainer

Другой метод анимации кнопки с повышенными правами для отображения кругового загрузчика — использование виджета AnimatedContainer. Этот виджет автоматически анимирует свои свойства при их изменении.

  1. Создание StatefulWidget. Создайте новый StatefulWidget для хранения состояния анимации кнопки.
class AnimatedButton extends StatefulWidget {
  @override
  _AnimatedButtonState createState() => _AnimatedButtonState();
}
  1. Определите состояние анимации. Внутри класса состояния определите логическую переменную, чтобы отслеживать, находится ли кнопка в состоянии загрузки.
class _AnimatedButtonState extends State<AnimatedButton> {
  bool _isLoading = false;
}
  1. Создание пользовательского интерфейса. В методе сборки используйте виджет AnimatedContainer, чтобы обернуть кнопку с повышенными правами. Обновите свойства кнопки в зависимости от состояния загрузки.
@override
Widget build(BuildContext context) {
  return AnimatedContainer(
    duration: Duration(milliseconds: 300),
    curve: Curves.easeInOut,
    decoration: BoxDecoration(
      borderRadius: BorderRadius.circular(_isLoading ? 50 : 0),
    ),
    child: ElevatedButton(
      onPressed: () {
        setState(() {
          _isLoading = true;
          // Add your button logic here
        });
      },
      child: _isLoading ? CircularProgressIndicator() : Text('Submit'),
    ),
  );
}

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

Не забывайте экспериментировать с различной длительностью, кривыми и визуальными стилями, чтобы они соответствовали дизайну вашего приложения. Приятного кодирования!