Decompose é uma biblioteca Kotlin multiplataforma para dividir seu código em componentes de lógica de negócios com reconhecimento de ciclo de vida estruturados em árvore (também conhecidos como BLoC), com funcionalidade de roteamento e UI conectável (Jetpack/Multiplatform Compose, Android Views, SwiftUI, Kotlin/React, etc.) .
Consulte o site do projeto para documentação e APIs.
Caso você tenha alguma dúvida ou ideia - há uma seção de Discussões. Bem-vindo também ao canal Kotlin Slack - #decompose!
⚡⚡⚡ Onde estão todas as estrelas, problemas, discussões, pull requests, etc?
Depois de passar 5 anos trabalhando em vários projetos para o Badoo/Bumble, agora estou partindo para outra aventura. Como parte dessa transição, fui solicitado a transferir este repositório para a conta do Badoo GitHub.
Agora continuo meu trabalho neste projeto como uma cópia .
Não deve haver alterações significativas relacionadas a esta transferência. A maioria dos links externos não deve ser quebrada. O link do repositório também é o mesmo: arkivanov/Decompose. Registre um problema neste repositório, se você achar que algo está quebrado ou não funciona corretamente.
Aqui está o que é mais afetado pela transferência:
Todas as estrelas foram transferidas
Todas as questões e discussões também foram transferidas. Farei todo o meu melhor para preencher a lacuna aqui.
Todas as solicitações pull com todo o histórico de comentários também desapareceram.
Continuarei dando o meu melhor por este projeto e pela comunidade! Negócios como sempre!
Recursos adicionais:
Um tópico no Hacker News
Por que decompor?
Decompor divide o código em componentes pequenos e independentes e os organiza em árvores. Cada componente pai só tem conhecimento de seus filhos imediatos.
A decomposição traça limites claros entre o código da UI e o código não-UI, o que oferece os seguintes benefícios:
Melhor separação de preocupações
UI conectável específica da plataforma (Compose, SwiftUI, Kotlin/React, etc.)
O código de lógica de negócios pode ser testado com testes de unidade multiplataforma puros
O estado de navegação é totalmente exposto - conecte qualquer UI desejada, anime como quiser usando a API da sua estrutura de UI favorita ou use API predefinida.
A navegação é uma função pura do estado antigo para um novo - navegar sem limites.
Injeção de dependência (DI) e inversão de controle (IoC) adequadas por meio do construtor, incluindo, entre outros, argumentos de tipo seguro.
Lógica de navegação compartilhada
Componentes com reconhecimento de ciclo de vida
Os componentes na pilha de retorno não são destruídos, eles continuam trabalhando em segundo plano sem UI
Preservação de estado (automaticamente no Android, manualmente em todos os outros alvos via kotlinx-serialization )
Retenção de instâncias (também conhecidas como ViewModels) sobre alterações de configuração (útil principalmente no Android)
Hora dos memes!
Configurar
Por favor, verifique a seção Instalação da documentação.
Plataformas suportadas
Em geral, o Decompose suporta os seguintes alvos: android , jvm , ios , watchos , tvos , macos , wasmJs , js . No entanto, alguns módulos não suportam todos os alvos ou o suporte depende da versão do Decompose. Consulte a documentação de instalação para obter detalhes.
Visão geral
Aqui estão alguns conceitos-chave da biblioteca, mais detalhes podem ser encontrados na documentação.
Componente - cada componente representa uma parte da lógica com seu próprio ciclo de vida, a UI é opcional e é conectada externamente
ComponentContext - cada componente tem seu próprio [ComponentContext], o que torna os componentes conscientes do ciclo de vida e permite a preservação do estado, retenção de instâncias (também conhecido como AndroidX ViewModel ) e manipulação do botão Voltar
Child Stack - permite a navegação entre componentes filhos, a navegação aninhada também é suportada
Slot filho - permite apenas um componente filho por vez ou nenhum
Páginas filhas - uma lista de componentes filhos com um componente selecionado (por exemplo, navegação semelhante a um pager)
Navegação genérica - fornece uma maneira de criar seu próprio modelo de navegação personalizado, quando nenhum dos modelos predefinidos atende às suas necessidades
Ciclo de vida - fornece uma maneira de escutar eventos de ciclo de vida em componentes
StateKeeper - torna possível preservar o estado ou os dados de um componente quando ele é destruído
InstanceKeeper - retém instâncias em seus componentes (semelhante ao AndroidX ViewModel )
BackPressedHandler - fornece uma maneira de manipular e interceptar pressionamentos do botão Voltar
Hierarquia de componentes
Hierarquia de UI conectável
Estrutura típica de componentes
Início rápido
Consulte a seção de início rápido dos documentos.
Amostras
Confira a seção Amostras da documentação para obter uma descrição completa de cada amostra.
Modelo
Confira o repositório de modelos que pode ser usado para iniciar um projeto para você.
Artigos
Decompor - experimentos com componentes e navegação com reconhecimento de ciclo de vida do Kotlin Multiplatform
Uma navegação abrangente de trinta linhas para Jetpack/Multiplatform Compose - se você achar o Decompose detalhado e preferir algo construído sobre o Compose.
Série "Abordagem baseada em componentes" de Artur Artikov
Parte 1: Combatendo a Complexidade em Aplicativos Android
Parte 2: Implementando Telas com a Biblioteca Decompose