#android #android-jetpack-compose
Вопрос:
Я работаю над многомодульным проектом с тремя модулями Core
, A
и B
. Как модули A
, так и B
способы использования Core
. В модуле есть экран (или составной) B
, который мне нужно повторно использовать в модуле A
. Я могу просто переместить этот экран Core
, но я не думаю, что это масштабируемо. Поэтому я определяю Interface
, в Core
чьей реализации будет обеспечиваться B
. Затем A
получите это Interface
через DI и используйте его, не имея дела с его реализацией.
interface NotificationLayout {
@Composable
fun NotificationLayoutStatusState(
modifier: Modifier,
)
}
Это будет реализовано компанией B
. Но когда я запускаю его, он просто вылетает с NoSuchMethodError
java.lang.NoSuchMethodError: No interface method NotificationLayoutStatusState(Landroidx/compose/ui/Modifier;Landroidx/compose/runtime/Composer;I)V
Кто-нибудь может мне помочь, пожалуйста. Я думаю, что это связано с Composable
аннотацией.
Комментарии:
1. Я не знаю, как решить вашу проблему, но с точки зрения архитектуры я бы создал новый модуль, что-то вроде
SharedViews
.2. Я думал об этом, но совместное использование представления означает совместное использование модели представления, класса состояния и почти всего остального. Я думаю, что это может привести к появлению модулей бога. Итак, я пытаюсь использовать инверсию зависимостей, чтобы сохранить код представления в своем собственном модуле и использовать только контракт.
Ответ №1:
Решение состоит в том, чтобы включить compose(т. е. не только добавление зависимостей compose) во всех модулях, использующих интерфейс. Раньше я включал только compose в модулях A
и B
, но не в core
, и это вызывало проблему.