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, который сам подписывается на изменения
Да, спасибо, поправлю статью. Это место переусложнено многократными изменениями в продакшн-проекте :) Не стал рефакторить для статьи, переделаю.
Что произойдёт, если в
PageControllerinitialPage != 0?
Скорее всего, не произойдет ничего, но перепроверю.
Статья - это круто и я очень рад, что они появляются, но, просто, материала по Flutter становится всё больше, а качество всё меньше. Джуны, один за другим копируют код из статей и потом удивляются, почему реджектят их PR ?
Спасибо ещё раз! Я написал в том числе затем, чтобы получить полезный фидбек.
Анимация интерактивной карусели во Flutter