Comments 6
final deviceWidth = MediaQuery.of(context).size.width;
final width = deviceWidth * 0.68;
deviceWidth
- это не ширина PageView
, а 0.68 лучше брать из viewportFraction, что бы не ходить по всему коду и не менять в случае чего
setState(() => _scrollPosition.value = widget.pageController.page ?? 0.0);
Не понимаю зачем сохранять позицию, если она уже есть. Так же setState
не имеет смысла, так как _scrollPosition
используется в AnimatedBuilder
, который сам подписывается на изменения
AnimatedBuilder(
animation: _scrollPosition,
builder: (BuildContext context, Widget? child) {
return Positioned(
top: arrowPadding - 33,
left: widthCard + _getArrowOffset(),
child: Transform.rotate(
angle: pi / 2.0,
Если уж и использовать AnimatedBuilder
, то в нём нужно перестраивать только то, что нужно (то есть, нужно передать Transform
в child
)
Что произойдёт, если в PageController
initialPage != 0
?
Статья - это круто и я очень рад, что они появляются, но, просто, материала по Flutter становится всё больше, а качество всё меньше. Джуны, один за другим копируют код из статей и потом удивляются, почему реджектят их PR ?
Там вообще много констант, сразу бросается в глаза вот такое:
static const imageHeight = 278.0
Чтобы поменять картинку, придется править код...
Спасибо! Тут два момента:
размер карточки обусловлен дизайном и должен быть строго 278. Это не карусель для карточек случайного / изменяемого размера.
эту же константу мы используем в GraphQL для запроса картинки нужного размера из CMS
Наверно, можно было бы вынести её в тему проекта (где цвета, шрифты и прочее), но, во-первых, не уверен, что это логично — константа используется для одного элемента на одном конкретном экране. А во-вторых — это бы существенно увеличило количество кода в этой статье :)
Ола! Крутой фидбек! Редко они бывают на основании столь внимательного изучения статьи.
Сразу скажу — у этой статьи нет цели научить писать идеальный код, скорее, я хотел показать способы оптимизации подобных анимаций.
deviceWidth
- это не ширинаPageView
, а 0.68 лучше брать из viewportFraction, что бы не ходить по всему коду и не менять в случае чего
Да, константы в коде могут вызывать вопросы — здесь и правда лучше делать так, как ты говоришь. Спасибо, поправлю.
Не понимаю зачем сохранять позицию, если она уже есть.
Ты имеешь ввиду, что можно сразу подписаться на изменения, которые отдает PageController
?
Так же
setState
не имеет смысла, так как_scrollPosition
используется вAnimatedBuilder
, который сам подписывается на изменения
Да, спасибо, поправлю статью. Это место переусложнено многократными изменениями в продакшн-проекте :) Не стал рефакторить для статьи, переделаю.
Что произойдёт, если в
PageController
initialPage != 0
?
Скорее всего, не произойдет ничего, но перепроверю.
Статья - это круто и я очень рад, что они появляются, но, просто, материала по Flutter становится всё больше, а качество всё меньше. Джуны, один за другим копируют код из статей и потом удивляются, почему реджектят их PR ?
Спасибо ещё раз! Я написал в том числе затем, чтобы получить полезный фидбек.
Анимация интерактивной карусели во Flutter