compose-multiplatform-patterns
Ajuda seu agente a usar padrões do Compose Multiplatform e Jetpack Compose em projetos KMP. Ele cobre gerenciamento de estado, navegação, temas e performance. Útil para criar interfaces de usuário consistentes.
O que ela faz
Este guia ensina como organizar e construir interfaces de usuário (telas) para aplicativos que funcionam em várias plataformas (como Android, iOS, Web e Desktop) usando uma tecnologia chamada Compose Multiplatform. Ele cobre como gerenciar informações que mudam (estado), como navegar entre telas, como definir o visual (temas) e como fazer tudo funcionar rápido.
Quando usar
- ✓Ao criar a interface de um app para Android, iOS, Web ou Desktop.
- ✓Ao gerenciar informações que mudam na tela.
- ✓Ao organizar a navegação entre as diferentes partes do app.
Exemplo do que pedir para a IA
“Como posso organizar o estado da minha tela de lista de produtos em um app Compose Multiplatform?”
Quer saber mais? Abra as seções abaixo.
Como usar
O jeito mais fácil: copie a mensagem abaixo e cole no Claude, ChatGPT, Cursor ou outra IA. Ela lê a skill e segue as instruções.
Link da skill
Mensagem pronta para colar
Como funciona
Ele mostra exemplos de código e padrões para gerenciar dados que mudam na tela, criar navegação segura entre telas e otimizar o desempenho. Você pode usar essas técnicas para construir apps mais robustos e eficientes.
Instalação
Jeito mais fácil: copie o link da skill e cole no Claude, ChatGPT ou Cursor pedindo para seguir as instruções.
No terminal (Claude Code, Codex, Cursor), na pasta do projeto:
npx skills add affaan-m/ECC --skill compose-multiplatform-patternsOu baixe só o arquivo:
curl -L https://raw.githubusercontent.com/affaan-m/ECC/main/pi/core/skills/compose-multiplatform-patterns/SKILL.md -o SKILL.mdConteúdo técnico (SKILL.md)
Tradução do texto original do autor no GitHub. Os comandos e códigos estão como no original.
Padrões do Compose Multiplatform
Padrões para construir UI compartilhada entre Android, iOS, Desktop e Web usando Compose Multiplatform e Jetpack Compose. Abrange gerenciamento de estado, navegação, temas e performance.
Quando Ativar
- Construindo UI com Compose (Jetpack Compose ou Compose Multiplatform)
- Gerenciando estado da UI com ViewModels e estado do Compose
- Implementando navegação em projetos KMP ou Android
- Projetando composables reutilizáveis e sistemas de design
- Otimizando recomposição e performance de renderização
Gerenciamento de Estado
ViewModel + Objeto de Estado Único
Use uma única data class para o estado da tela. Exponha-a como StateFlow e colete no Compose:
data class ItemListState(
val items: List<Item> = emptyList(),
val isLoading: Boolean = false,
val error: String? = null,
val searchQuery: String = ""
)
class ItemListViewModel(
private val getItems: GetItemsUseCase
) : ViewModel() {
private val _state = MutableStateFlow(ItemListState())
val state: StateFlow<ItemListState> = _state.asStateFlow()
fun onSearch(query: String) {
_state.update { it.copy(searchQuery = query) }
loadItems(query)
}
private fun loadItems(query: String) {
viewModelScope.launch {
_state.update { it.copy(isLoading = true) }
getItems(query).fold(
onSuccess = { items -> _state.update { it.copy(items = items, isLoading = false) } },
onFailure = { e -> _state.update { it.copy(error = e.message, isLoading = false) } }
)
}
}
}
Coletando Estado no Compose
@Composable
fun ItemListScreen(viewModel: ItemListViewModel = koinViewModel()) {
val state by viewModel.state.collectAsStateWithLifecycle()
ItemListContent(
state = state,
onSearch = viewModel::onSearch
)
}
@Composable
private fun ItemListContent(
state: ItemListState,
onSearch: (String) -> Unit
) {
// Stateless composable — easy to preview and test
}
Padrão Event Sink
Para telas complexas, use uma sealed interface para eventos em vez de múltiplos lambdas de callback:
sealed interface ItemListEvent {
data class Search(val query: String) : ItemListEvent
data class Delete(val itemId: String) : ItemListEvent
data object Refresh : ItemListEvent
}
// In ViewModel
fun onEvent(event: ItemListEvent) {
when (event) {
is ItemListEvent.Search -> onSearch(event.query)
is ItemListEvent.Delete -> deleteItem(event.itemId)
is ItemListEvent.Refresh -> loadItems(_state.value.searchQuery)
}
}
// In Composable — single lambda instead of many
ItemListContent(
state = state,
onEvent = viewModel::onEvent
)
Navegação
Navegação Type-Safe (Compose Navigation 2.8+)
Defina rotas como objetos @Serializable:
@Serializable data object HomeRoute
@Serializable data class DetailRoute(val id: String)
@Serializable data object SettingsRoute
@Composable
fun AppNavHost(navController: NavHostController = rememberNavController()) {
NavHost(navController, startDestination = HomeRoute) {
composable<HomeRoute> {
HomeScreen(onNavigateToDetail = { id -> navController.navigate(DetailRoute(id)) })
}
composable<DetailRoute> { backStackEntry ->
val route = backStackEntry.toRoute<DetailRoute>()
DetailScreen(id = route.id)
}
composable<SettingsRoute> { SettingsScreen() }
}
}
Navegação de Diálogo e Bottom Sheet
Use padrões dialog() e de overlay em vez de show/hide imperativo:
NavHost(navController, startDestination = HomeRoute) {
composable<HomeRoute> { /* ... */ }
dialog<ConfirmDeleteRoute> { backStackEntry ->
val route = backStackEntry.toRoute<ConfirmDeleteRoute>()
ConfirmDeleteDialog(
itemId = route.itemId,
onConfirm = { navController.popBackStack() },
onDismiss = { navController.popBackStack() }
)
}
}
Design Composable
APIs Baseadas em Slots
Projete composables com parâmetros de slot para flexibilidade:
@Composable
fun AppCard(
modifier: Modifier = Modifier,
header: @Composable () -> Unit = {},
content: @Composable ColumnScope.() -> Unit,
actions: @Composable RowScope.() -> Unit = {}
) {
Card(modifier = modifier) {
Column {
header()
Column(content = content)
…
Perguntas frequentes
O que é 'estado' em um aplicativo?
Estado é qualquer informação que pode mudar com o tempo e que afeta o que o usuário vê na tela. Por exemplo, se um botão está clicado, o texto em um campo de entrada ou uma lista de itens carregando.
O que significa 'navegação type-safe'?
Significa que o sistema de navegação verifica se você está indo para telas válidas e passando as informações corretas, ajudando a evitar erros antes mesmo de o aplicativo rodar.
Como posso fazer minha interface funcionar mais rápido?
O guia sugere usar 'tipos estáveis' e garantir que listas de itens sejam carregadas de forma eficiente, evitando que a interface precise redesenhar partes desnecessárias.
Detalhes
Descrição original do autor
Compose Multiplatform and Jetpack Compose patterns for KMP projects — state management, navigation, theming, performance, and platform-specific UI. Use when building Compose or Jetpack Compose UI, state, navigation, or theming in a KMP project.
repo: affaan-m/ECC
Popularidade
- Estrelas no GitHub
- 280 mil
- Posição no ranking
- #27
- Licença
- MIT
- Atualizada em
- 15/10/2026
Comentários
- …
Mais skills deste repositório
accessibility
Ajuda seu agente a criar interfaces que todos possam usar. Garante que sites e aplicativos funcionem bem para pessoas com deficiência, como cegos ou com mobilidade reduzida.
affaan-m/ECC
agent-architecture-audit
Faz seu agente verificar se tudo está funcionando corretamente. Ele encontra e conserta problemas em sistemas de IA, garantindo que funcionem como esperado.
affaan-m/ECC
agent-eval
Ajuda seu agente a comparar diferentes ferramentas de programação de IA. Ele mede qual é mais rápido, barato e confiável para realizar tarefas específicas.
affaan-m/ECC
agent-harness-construction
Faz seu agente entender melhor como realizar tarefas. Ele otimiza as ferramentas e instruções que o agente usa para aumentar suas chances de sucesso.
affaan-m/ECC
Skills parecidas
flutter-animating-apps
Faz seu agente adicionar efeitos animados e transições em aplicativos Flutter. É útil para criar movimento e design visual em apps para iOS e Android.
nexu-io/open-design
add-app-clip
Faz seu agente adicionar um App Clip do iOS a um app Expo. É útil para criar versões leves de apps que são abertas por links.
sickn33/agentic-awesome-skills
android-dev
Ajuda a desenvolver aplicativos Android. Cobre diferentes formas de criar apps, nativos ou multiplataforma.
sickn33/agentic-awesome-skills