💻 Лезем в исходники Compose, чтобы заставить LazyLayoutItemAnimator дружить с кастомны...
💻 Лезем в исходники Compose, чтобы заставить LazyLayoutItemAnimator дружить с кастомными анимациями Когда мы переписывали главный экран Т-Мобайла с XML на Jetpack Compose, столкнулись с неожиданной проблемой: в LazyColumn при расширении верхнего элемента нижние карточки смещались несинхронно. Возникало перекрытие, которое наша дизайн-система не простила бы. Попытки настроить стандартный animateItem не дали результата. Замена spring на линейный tween, замедление/ускорение placementSpec и другие эксперименты не помогли. Отключение placementSpec давало нужную синхронизацию, но убивало анимации удаления и перемещения. Наш android-разработчик Виктор Строеску полез в исходники Compose и обнаружил, что: → animateItem — это просто маркер, который вешает на элемент parentData со спеками анимаций; → реально анимациями управляет внутренний LazyLayoutItemAnimator; → все нужные классы internal и недоступны извне; → написать свой модификатор на уровне Composable невозможно, потому что при удалении элемента композиция уничтожается раньше, чем стартует анимация. ⚡️ К какому компромиссу удалось прийти, чтобы решить эту проблему, — читайте на Хабре. #android #jetpackcompose #mobile