Составная аннотация в Android jetpack compose

#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 , и это вызывало проблему.