Modularized app, based on MVI and Clean Architecture. It allows you to create, read, update and delete a delivery form on a local database. The city field is fetched from a remote API (Brazilian cities) after choosing the State. Static code analysis with detekt, Github Actions CI and complete unit and instrumented testing.
Built with:
- Jetpack Compose
- Hilt
- Room
- ViewModel
- Flow / Coroutines
- Compose Navigation
- Retrofit / OkHttp / Moshi
- Material3
- Mockk
- Resource localization
- Detekt
- Dependabot
Contains the root NavHost for navigating between features. All feature modules have their own internal navigation graph implemented with a public NavGraphBuilder extension function.
Feature modules contain logically related user flows. Features can navigate between each other through the :app module NavHost. Features are structured with domain/data/presentation logic for separation of concerns. Feature modules don't depend on each other.
Contains database initialization. Features can implement their own tables and expose DAOs to be injected in feature module data sources.
App-wide reusable components and app theme.
Abstracts away the logic for building Retrofit, interceptors, logging etc. Features can just call retrofit.create()
with their own interface.
Contains some useful UI utilities.
Useful testing libraries and helper classes.
Just run the app module
Aplicativo modularizado, baseado em MVI e arquitetura limpa. Permite realizar um cadastro de entrega e salvar em banco de dados local. A lista de cidades é populado a partir de uma consulta na API do IBGE (https://servicodados.ibge.gov.br/api/docs/localidades#api-Municipios-estadosUFMunicipiosGet), após preencher o campo Estado. Análise estática de código com o detekt, CI com Github Actions e testes unitários e instrumentados.
Construído com:
- Jetpack Compose
- Android Architecture Components
- Hilt
- Room
- ViewModel
- Flow / Coroutines
- Compose Navigation
- Retrofit / OkHttp / Moshi
- Material3
- Mockk
- Localização
- Detekt
- Dependabot
Contém o NavHost raiz para navegar entre as features. Todos os módulos de feature possuem seu próprio gráfico de navegação interna implementado com uma função de extensão pública do NavGraphBuilder.
Os módulos de feature contêm fluxos logicamente relacionados. Features podem navegar entre si por meio do NavHost do módulo :app. As features são estruturadas com lógica de domínio/dados/apresentação para separação de camadas. Módulos de feature não dependem um do outro.
Contém inicialização do banco de dados. As features podem implementar suas próprias tabelas e expor DAOs para serem injetados em seus data sources.
Componentes reutilizáveis em todo o aplicativo e o tema base.
Abstrai a lógica para construção do Retrofit, interceptores, logging etc. As features podem simplesmente chamar o retrofit.create()
com sua própria interface.
Contém alguns utilitários de úteis de UI.
Bibliotecas de testes e classes auxiliares.
Apenas executar o módulo :app