Класс AnimationController
Класс AnimationController нужен ticker от
SingleTickerProviderStateMixin
или TickerProviderStateMixin.
Параметры duration и vsync задают длительность и синхронизацию кадров.
Запуск и остановка идут через методы forward, reverse и stop.
Синтаксис
AnimationController(
duration: duration,
vsync: vsync,
)
Параметры
| Параметр | Описание |
|---|---|
duration |
Сколько длится проход от 0 до 1. Принимает Duration.
|
vsync |
Источник тактов кадра. Обычно это State с миксином
SingleTickerProviderStateMixin.
|
Методы
| Метод | Описание |
|---|---|
animateBack |
Анимирует value к target в обратном направлении по curve. |
animateTo |
Анимирует value к target за duration с curve. |
dispose |
Освобождает Ticker и отписывает listener контроллера. |
fling |
Запускает анимацию с начальной скоростью velocity. |
forward |
Запускает анимацию от текущего value к 1.0.
|
repeat |
Повторяет анимацию между min и max, пока не вызовут stop. |
reset |
Ставит value в 0.0 без анимации. Давайте разберём вызов на примерах.
|
reverse |
Запускает анимацию от текущего value к 0.0.
|
stop |
Останавливает текущую анимацию контроллера. |
Пример
Давайте создадим контроллер и запустим forward:
import 'package:flutter/material.dart';
class Pulse extends StatefulWidget
{
const Pulse({super.key});
@override
State<Pulse> createState() => _PulseState();
}
class _PulseState extends State<Pulse> with SingleTickerProviderStateMixin
{
late AnimationController _controller;
@override
void initState()
{
super.initState();
_controller = AnimationController(
vsync: this,
duration: Duration(milliseconds: 800),
)..forward();
}
@override
void dispose()
{
_controller.dispose();
super.dispose();
}
@override
Widget build(BuildContext context)
{
return MaterialApp(
home: Scaffold(
body: Center(
child: Text(
'12345',
style: TextStyle(
opacity: _controller.value,
),
),
),
),
);
}
}
void main()
{
runApp(const Pulse());
}
На экране '12345' проявится по мере роста value у AnimationController.
Пример
Давайте покажем FadeTransition с контроллером:
import 'package:flutter/material.dart';
class Pulse extends StatefulWidget
{
const Pulse({super.key});
@override
State<Pulse> createState() => _PulseState();
}
class _PulseState extends State<Pulse> with SingleTickerProviderStateMixin
{
late AnimationController _controller;
@override
void initState()
{
super.initState();
_controller = AnimationController(
vsync: this,
duration: Duration(milliseconds: 600),
);
}
@override
void dispose()
{
_controller.dispose();
super.dispose();
}
@override
Widget build(BuildContext context)
{
return MaterialApp(
home: Scaffold(
body: Center(
child: FadeTransition(
opacity: _controller,
child: Text('abcde'),
),
),
),
);
}
}
void main()
{
runApp(const Pulse());
}
На экране текст 'abcde' связан с AnimationController через FadeTransition.
Смотрите также
-
смесь
SingleTickerProviderStateMixin,
которую добавляют кStateдляvsync -
класс
Tween,
который переводит значениеcontroller.value -
виджет
FadeTransition,
который слушаетAnimation -
метод
forward,
который доводитvalueдо 1