
28 Brazilian state and national flags as scalable vector assets in four styles (full, rounded, square-rounded, circle); tree-shakable getters, no extra resources or dependencies.
Bandeiras dos 26 estados brasileiros, do Distrito Federal e do Brasil.
Nítidas em qualquer tamanho, em Kotlin puro, para Compose Multiplatform.
Português · English
Usa Flutter? A mesma biblioteca existe em Dart: brazil_state_flags.
full (3:2), rounded (3:2 com cantos arredondados), square-rounded e circle.ImageVector compilado em Kotlin, sem nada em res/drawable.// build.gradle.kts
dependencies {
implementation("io.github.adrianogba:brazil-state-flags-compose:1.0.1")
}import io.github.adrianogba.brazilstateflags.BrazilStateFlag
import io.github.adrianogba.brazilstateflags.FlagsCircle
import io.github.adrianogba.brazilstateflags.FlagsFull
// Escolha o estilo, depois o estado.
BrazilStateFlag(FlagsCircle.SaoPaulo, size = 48.dp)
BrazilStateFlag(FlagsFull.RioDeJaneiro, size = 120.dp)
// Siglas de UF funcionam como atalho.
BrazilStateFlag(FlagsCircle.SP, size = 24.dp)As quatro coleções são FlagsFull, FlagsRounded, FlagsSquareRounded e
FlagsCircle. Cada bandeira também é um ImageVector comum, então funciona
direto em qualquer coisa que aceite um:
Icon(imageVector = FlagsCircle.Bahia, contentDescription = null)
Image(imageVector = FlagsFull.Parana, contentDescription = null)size define o lado maior. O outro segue a proporção da arte, então a bandeira
nunca é esticada. Deixe size nulo para dimensionar pelo modifier.
BrazilStateFlag(FlagsFull.Parana, size = 150.dp) // vira 150 x 100
BrazilStateFlag(FlagsCircle.Parana, size = 64.dp) // vira 64 x 64Formulários de endereço precisam escolher a bandeira a partir de uma string:
val bandeira = flagForUf("sp", FlagStyle.CIRCLE)
if (bandeira != null) BrazilStateFlag(bandeira, size = 32.dp)
// Montando um seletor:
brazilStates.forEach { println("${it.uf} ${it.name}") }flagForUf alcança todas as bandeiras do estilo pedido, então o R8 não
consegue remover nenhuma. Se você só precisa de duas ou três bandeiras fixas,
cite as propriedades diretamente e deixe o resto ser removido.
Três estados têm dois desenhos no conjunto original. Eles não seguem um eixo único de "detalhado" e "simples", então cada um é exposto pelo que realmente é:
| Padrão | Alternativa | Diferença |
|---|---|---|
Paraiba |
ParaibaSimplified |
a simplificada não traz a palavra NEGO |
Ceara |
CearaSimplified |
a simplificada não traz o brasão |
EspiritoSanto |
EspiritoSantoSimplified |
a padrão traz o lema TRABALHA E CONFIA |
BrazilStateFlag(
FlagsCircle.Bahia,
size = 40.dp,
contentDescription = "Bandeira da Bahia",
)Sem contentDescription a bandeira é tratada como decorativa, que costuma ser
o certo quando já existe um texto ao lado.
| Requisito | Mínimo |
|---|---|
| Compose Multiplatform | 1.12.0 |
| Kotlin | 2.4 |
| Android minSdk | 23 |
| Android | iOS | Desktop (JVM) | Web (Wasm) | Web (JS) |
|---|---|---|---|---|
| ✅ | ✅ | ✅ | ✅ | ✅ |
Você não precisa de Kotlin Multiplatform. Em um app Android normal com
Jetpack Compose, a dependência resolve para androidx.compose, e as bandeiras
são androidx.compose.ui.graphics.vector.ImageVector de verdade:
// Em um app puramente Android, sem nada de multiplatform:
val vetor: ImageVector = FlagsCircle.SaoPaulo
Image(imageVector = vetor, contentDescription = null)O que não funciona é o Android clássico com XML e Views, porque ImageVector
só existe no Compose.
A arte vem de
icones-bandeiras-br-uf,
de Pierre Lapalu, publicada sob CC0 1.0. Os SVGs são convertidos em Kotlin por
tool/generate_kotlin.dart, incluído no repositório.
Flags of the 26 Brazilian states, the Federal District and Brazil. Sharp at any size, in pure Kotlin, for Compose Multiplatform.
Using Flutter? The same library exists in Dart: brazil_state_flags.
full (3:2), rounded (3:2 with rounded corners), square-rounded and circle.ImageVector compiled into Kotlin, with nothing in res/drawable.dependencies {
implementation("io.github.adrianogba:brazil-state-flags-compose:1.0.1")
}BrazilStateFlag(FlagsCircle.SaoPaulo, size = 48.dp)
BrazilStateFlag(FlagsFull.RioDeJaneiro, size = 120.dp)
BrazilStateFlag(FlagsCircle.SP, size = 24.dp)The four collections are FlagsFull, FlagsRounded, FlagsSquareRounded and
FlagsCircle. Every flag is a plain ImageVector, so it drops into anything
that takes one:
Icon(imageVector = FlagsCircle.Bahia, contentDescription = null)
Image(imageVector = FlagsFull.Parana, contentDescription = null)size sets the longest side. The other follows the artwork's proportions, so
the flag is never stretched. Leave size null to size it through modifier.
val flag = flagForUf("sp", FlagStyle.CIRCLE)
if (flag != null) BrazilStateFlag(flag, size = 32.dp)
brazilStates.forEach { println("${it.uf} ${it.name}") }flagForUf reaches every flag in the requested style, so R8 cannot drop any of
them. If you only need a couple of fixed flags, name the properties directly
and let the rest be stripped.
Three states ship two drawings in the source set. They do not follow a single "detailed versus simple" axis, so each is exposed for what it actually is:
| Default | Alternative | Difference |
|---|---|---|
Paraiba |
ParaibaSimplified |
the simplified one drops the word NEGO |
Ceara |
CearaSimplified |
the simplified one drops the coat of arms |
EspiritoSanto |
EspiritoSantoSimplified |
the default carries the TRABALHA E CONFIA motto |
| Android | iOS | Desktop (JVM) | Web (Wasm) | Web (JS) |
|---|---|---|---|---|
| ✅ | ✅ | ✅ | ✅ | ✅ |
You do not need Kotlin Multiplatform. In a plain Android app using Jetpack
Compose the dependency resolves to androidx.compose, and the flags really are
androidx.compose.ui.graphics.vector.ImageVector:
// In an Android-only app, with no multiplatform anywhere:
val vector: ImageVector = FlagsCircle.SaoPaulo
Image(imageVector = vector, contentDescription = null)What does not work is classic Android with XML and Views, since ImageVector
exists only in Compose.
Generated from the KDoc by Dokka and published with every release: javadoc.io.
Artwork from
icones-bandeiras-br-uf
by Pierre Lapalu, released under CC0 1.0. The SVGs are converted to Kotlin by
tool/generate_kotlin.dart, included in the repository.
MIT. See LICENSE.
Bandeiras dos 26 estados brasileiros, do Distrito Federal e do Brasil.
Nítidas em qualquer tamanho, em Kotlin puro, para Compose Multiplatform.
Português · English
Usa Flutter? A mesma biblioteca existe em Dart: brazil_state_flags.
full (3:2), rounded (3:2 com cantos arredondados), square-rounded e circle.ImageVector compilado em Kotlin, sem nada em res/drawable.// build.gradle.kts
dependencies {
implementation("io.github.adrianogba:brazil-state-flags-compose:1.0.1")
}import io.github.adrianogba.brazilstateflags.BrazilStateFlag
import io.github.adrianogba.brazilstateflags.FlagsCircle
import io.github.adrianogba.brazilstateflags.FlagsFull
// Escolha o estilo, depois o estado.
BrazilStateFlag(FlagsCircle.SaoPaulo, size = 48.dp)
BrazilStateFlag(FlagsFull.RioDeJaneiro, size = 120.dp)
// Siglas de UF funcionam como atalho.
BrazilStateFlag(FlagsCircle.SP, size = 24.dp)As quatro coleções são FlagsFull, FlagsRounded, FlagsSquareRounded e
FlagsCircle. Cada bandeira também é um ImageVector comum, então funciona
direto em qualquer coisa que aceite um:
Icon(imageVector = FlagsCircle.Bahia, contentDescription = null)
Image(imageVector = FlagsFull.Parana, contentDescription = null)size define o lado maior. O outro segue a proporção da arte, então a bandeira
nunca é esticada. Deixe size nulo para dimensionar pelo modifier.
BrazilStateFlag(FlagsFull.Parana, size = 150.dp) // vira 150 x 100
BrazilStateFlag(FlagsCircle.Parana, size = 64.dp) // vira 64 x 64Formulários de endereço precisam escolher a bandeira a partir de uma string:
val bandeira = flagForUf("sp", FlagStyle.CIRCLE)
if (bandeira != null) BrazilStateFlag(bandeira, size = 32.dp)
// Montando um seletor:
brazilStates.forEach { println("${it.uf} ${it.name}") }flagForUf alcança todas as bandeiras do estilo pedido, então o R8 não
consegue remover nenhuma. Se você só precisa de duas ou três bandeiras fixas,
cite as propriedades diretamente e deixe o resto ser removido.
Três estados têm dois desenhos no conjunto original. Eles não seguem um eixo único de "detalhado" e "simples", então cada um é exposto pelo que realmente é:
| Padrão | Alternativa | Diferença |
|---|---|---|
Paraiba |
ParaibaSimplified |
a simplificada não traz a palavra NEGO |
Ceara |
CearaSimplified |
a simplificada não traz o brasão |
EspiritoSanto |
EspiritoSantoSimplified |
a padrão traz o lema TRABALHA E CONFIA |
BrazilStateFlag(
FlagsCircle.Bahia,
size = 40.dp,
contentDescription = "Bandeira da Bahia",
)Sem contentDescription a bandeira é tratada como decorativa, que costuma ser
o certo quando já existe um texto ao lado.
| Requisito | Mínimo |
|---|---|
| Compose Multiplatform | 1.12.0 |
| Kotlin | 2.4 |
| Android minSdk | 23 |
| Android | iOS | Desktop (JVM) | Web (Wasm) | Web (JS) |
|---|---|---|---|---|
| ✅ | ✅ | ✅ | ✅ | ✅ |
Você não precisa de Kotlin Multiplatform. Em um app Android normal com
Jetpack Compose, a dependência resolve para androidx.compose, e as bandeiras
são androidx.compose.ui.graphics.vector.ImageVector de verdade:
// Em um app puramente Android, sem nada de multiplatform:
val vetor: ImageVector = FlagsCircle.SaoPaulo
Image(imageVector = vetor, contentDescription = null)O que não funciona é o Android clássico com XML e Views, porque ImageVector
só existe no Compose.
A arte vem de
icones-bandeiras-br-uf,
de Pierre Lapalu, publicada sob CC0 1.0. Os SVGs são convertidos em Kotlin por
tool/generate_kotlin.dart, incluído no repositório.
Flags of the 26 Brazilian states, the Federal District and Brazil. Sharp at any size, in pure Kotlin, for Compose Multiplatform.
Using Flutter? The same library exists in Dart: brazil_state_flags.
full (3:2), rounded (3:2 with rounded corners), square-rounded and circle.ImageVector compiled into Kotlin, with nothing in res/drawable.dependencies {
implementation("io.github.adrianogba:brazil-state-flags-compose:1.0.1")
}BrazilStateFlag(FlagsCircle.SaoPaulo, size = 48.dp)
BrazilStateFlag(FlagsFull.RioDeJaneiro, size = 120.dp)
BrazilStateFlag(FlagsCircle.SP, size = 24.dp)The four collections are FlagsFull, FlagsRounded, FlagsSquareRounded and
FlagsCircle. Every flag is a plain ImageVector, so it drops into anything
that takes one:
Icon(imageVector = FlagsCircle.Bahia, contentDescription = null)
Image(imageVector = FlagsFull.Parana, contentDescription = null)size sets the longest side. The other follows the artwork's proportions, so
the flag is never stretched. Leave size null to size it through modifier.
val flag = flagForUf("sp", FlagStyle.CIRCLE)
if (flag != null) BrazilStateFlag(flag, size = 32.dp)
brazilStates.forEach { println("${it.uf} ${it.name}") }flagForUf reaches every flag in the requested style, so R8 cannot drop any of
them. If you only need a couple of fixed flags, name the properties directly
and let the rest be stripped.
Three states ship two drawings in the source set. They do not follow a single "detailed versus simple" axis, so each is exposed for what it actually is:
| Default | Alternative | Difference |
|---|---|---|
Paraiba |
ParaibaSimplified |
the simplified one drops the word NEGO |
Ceara |
CearaSimplified |
the simplified one drops the coat of arms |
EspiritoSanto |
EspiritoSantoSimplified |
the default carries the TRABALHA E CONFIA motto |
| Android | iOS | Desktop (JVM) | Web (Wasm) | Web (JS) |
|---|---|---|---|---|
| ✅ | ✅ | ✅ | ✅ | ✅ |
You do not need Kotlin Multiplatform. In a plain Android app using Jetpack
Compose the dependency resolves to androidx.compose, and the flags really are
androidx.compose.ui.graphics.vector.ImageVector:
// In an Android-only app, with no multiplatform anywhere:
val vector: ImageVector = FlagsCircle.SaoPaulo
Image(imageVector = vector, contentDescription = null)What does not work is classic Android with XML and Views, since ImageVector
exists only in Compose.
Generated from the KDoc by Dokka and published with every release: javadoc.io.
Artwork from
icones-bandeiras-br-uf
by Pierre Lapalu, released under CC0 1.0. The SVGs are converted to Kotlin by
tool/generate_kotlin.dart, included in the repository.
MIT. See LICENSE.