FAQ по анимациям во Flutter
❓Почему нужно добавлять SingleTickerProviderStateMixin ко всему виджету, когда используем AnimationController, но не нужно при использовании AnimatedContainer?
SingleTickerProviderStateMixin инкапсулирует логику счётчика, который говорит виджету, что он должен перерисоваться. Он привязывается к жизненному циклу виджета, в котором происходит анимация.
В AnimatedContainer на самом деле тоже используется AnimationController, просто находится он ниже по дереву. AnimatedContainer скрывает это за декорацией.
❓Как я могу создать неявную анимацию для виджета, который не находится в библиотеке Flutter?
Даже неявная анимация использует «под капотом» тот же самый AnimationController.
Мы обязательно сделаем воркшоп по созданию своей неявной анимации, но в рамках этого текста я могу подсказать только использовать stateful-виджет, AnimationController и метод жизненного цикла didUpdateWidget, который поможет вам понять, что виджет изменился «снаружи».
❓Как AnimatedContainer при изменении цвета узнаёт, какие цвета ему нужно показывать в промежутке?
Это достигается при помощи линейной интерполяции. Линейная интерполяция — это функция, которая помогает нам привести значение одного диапазона к значению другого. Например, результатом интерполяции из диапазона 0–1 к 100–200 по значению 0,5 будет 150, по 0 — 100 и так далее.
У представления цвета во Flutter (класс Color) есть фабрика lerp. Отправляем в функцию белый и чёрный цвета и значение 0,5. Получаем серый — средний цвет между ними.
Такие же фабрики есть у Alignment, BorderRadius и даже TextStyle.
❓Есть ли простой вариант запуска анимации один раз при старте экрана, не используя AnimationController?
Самый простой вариант — использовать TweenAnimationBuilder.
💬 Что вам интересно узнать про анимации во Flutter? Пишите в комментариях 🙌
Post #109
1.39K
- 🔥 22
- 👍 6