Pet-project, направленный в первую очередь на изучение новых подходов и новых инструментов.
В проекте в немалом количестве присутствуют огрехи и компромисные решения. Некоторые помечены TODO-комментариями, а некоторые нет. Просьба не расценивать код как эталон, а просто по необходимости примечать для себя некоторые решения. Также будет большая благодарность, если подкинете идей, как можно улучшить код =)
В проекте используется JetpackCompose + SingleActivity
Отсутствуют полностью фрагменты
Навигация используется стандартная для моих проектов - самописное решение с Destination и инжектом routers во Presentation-слой
Для подхода с использованием Compose навигация была адаптирована.
Используется самописный примитивный стек навигации.
Jetpack Compose на момент написания проекта предлагает в большинстве своем примитивные Composable-View
Для реализации уже стандартных компонентов пришлось писать код с 0, например различные варианты InputTextField в TextFieldComposable.kt
Для других компонентов, для более удобного использования стилизованных текстов были реализованы вариации Text в TextComposable.kt
Для соответствия Slot Api были примеры с переопределением LocalProvider. Используется для того, чтобы локально, в рамках одной или нескольких composable можно было переопределить styles/colors/shape/alpha/appearance.
Для запуска SnackBar использовался стандартный инструмент LaunchEffect, который по сути является оберткой над Coroutine, адаптированной под использование в compose.
Для запуска BottomSheet пришлось использовать экспериментальный код, аналог Scaffold, только с модальным нижним диалогом. Имхо такой вариант очень некрасив и неудобен. Соответственно и реализовать его адекватно (с точки зрения стройности кода) его не получилось, несмотря на то, что функционал полностью работает
В данном проекте в рамках эксперимента был совершен переход на Kotlin Gradle Scripts. Новый функционал достаточно интересен. При этом скорость сборки как минимум такая же, а в некоторых сценариях даже выше, чем при использовании gradle groovy.
Однако в процессе реализации возникла проблема с таской clean - которая вроде и выполняется успешно, но при этом выдает ошибку на новый build-модуль
Именно по этой причине код не залит пока что в develop, а ждет своего часа в ветке improvement/gradle-refactor