https://github.com/amoradacorp/amoradacountrypicker
Jetpack Compose UI library for selecting country, currency, and phone code.
https://github.com/amoradacorp/amoradacountrypicker
android country-picker currency-picker jetpack-compose kotlin open-source phone-code-picker ui-library
Last synced: 12 days ago
JSON representation
Jetpack Compose UI library for selecting country, currency, and phone code.
- Host: GitHub
- URL: https://github.com/amoradacorp/amoradacountrypicker
- Owner: AmoradaCorp
- License: mit
- Created: 2025-04-30T00:33:54.000Z (25 days ago)
- Default Branch: master
- Last Pushed: 2025-05-07T05:26:37.000Z (17 days ago)
- Last Synced: 2025-05-07T05:27:09.955Z (17 days ago)
- Topics: android, country-picker, currency-picker, jetpack-compose, kotlin, open-source, phone-code-picker, ui-library
- Language: Kotlin
- Homepage:
- Size: 121 KB
- Stars: 0
- Watchers: 1
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# AmoradaCountryPicker
**Country Picker Android Library** ✨🚀
> Librería 100% Jetpack Compose, modular, ligera y reutilizable para seleccionar país, código telefónico y moneda. Diseñada bajo Clean Architecture, SOLID y Compose 2025.
---
## 📋 Funcionalidades
- Lista de países (+195) basada en ISO 3166-1.
- Selección de país, moneda y código telefónico.
- UX optimizada: clic en todo el campo y búsqueda en tiempo real.
- Interfaz `CountryProvider` para desacoplar la fuente de datos (assets, red, mock...).
- Soporte para tema claro/oscuro.
- Código desacoplado, testeable y profesional.---
## 🚀 Integración
### Gradle Settings
```kotlin
// settings.gradle.kts
dependencyResolutionManagement {
repositoriesMode.set(RepositoriesMode.FAIL_ON_PROJECT_REPOS)
repositories {
google()
mavenCentral()
maven { url = uri("https://jitpack.io") }
}
}```
### build.gradle.kts (modulo app)
```kotlin
# libs.versions.toml
[libraries]
amorada-countrypicker = { group = "com.github.AmoradaCorp", name = "AmoradaCountryPicker", version = "v1.4.0" }```
```kotlin
// build.gradle.kts
implementation(libs.amorada.countrypicker)
```---
## 💻 Uso rápido con componentes incluidos
```kotlin
val countryProvider = CountryRepository(context)
```### Selector de país (con bandera, código y nombre)
```kotlin
CountryPickerDropdown(
selectedCountryCode = state.countryCode,
onCountrySelected = {
state = state.copy(
countryCode = it.countryCode,
countryName = it.countryName
)
},
countryProvider = countryProvider,
modifier = Modifier.fillMaxWidth()
)```
### Selector de moneda (bandera, código y nombre de moneda)
```kotlin
CurrencyPickerDropdown(
selectedCurrencyCode = state.currencyCode,
onCurrencySelected = {
state = state.copy(
currencyCode = it.currencyCode,
currencyName = it.currencyName.orEmpty()
)
},
countryProvider = countryProvider,
modifier = Modifier.fillMaxWidth()
)```
### Selector de código telefónico (bandera + código)
```kotlin
PhoneCodePickerDropdown(
selectedPhoneCode = state.phoneCode,
onPhoneCodeSelected = {
state = state.copy(
phoneCode = it.phoneCode
)
},
countryProvider = countryProvider,
modifier = Modifier.fillMaxWidth()
)```
📝 **¿Qué es CountryProvider?**
```kotlin
interface CountryProvider {
fun getCountries(): List
}
```
La librería no accede a Context ni carga datos por sí sola. La responsabilidad es del consumidor.Ejemplo:
```kotlin
class CountryRepository(private val context: Context) : CountryProvider {
override fun getCountries(): List {
// Cargar JSON desde assets
}
}```
---
## ⚙️ Consumo manual sin componentes UI
Puedes acceder a la data para construir tu propio selector:
```kotlin
val countries = countryProvider.getCountries()val countryList = countries.map {
"${it.emoji.orEmpty()} ${it.countryCode} - ${it.countryName}"
}val phoneList = countries.map {
"${it.emoji.orEmpty()} ${it.phoneCode}"
}val currencyList = countries.map {
"${it.emoji.orEmpty()} ${it.currencyCode} - ${it.currencyName}"
}```
Acceso a moneda o teléfono:
```kotlin
val phoneList = countries.map { "${it.emoji.orEmpty()} ${it.phoneCode}" }
val currencyList = countries.map { "${it.emoji.orEmpty()} ${it.currencyCode} - ${it.currencyName}" }
```---
## ✨ Modifier recomendado
Para todos los componentes expuestos (`CountryPickerDropdown`, `CurrencyPickerDropdown`, `PhoneCodePickerDropdown`) se recomienda:
```kotlin
modifier = Modifier.fillMaxWidth()
```Puedes ajustarlo según tu diseño (`padding`, `weight`, etc). Todos los componentes son flexibles.
---
## 🙋♂️ Contribuciones
Este repositorio es público y puedes hacer fork para tu propio uso.
Sin embargo, **las contribuciones directas no están habilitadas en este momento** para mantener control sobre la evolución de la librería.Si deseas sugerir mejoras, puedes abrir un `Issue`.
---
## 📜 Licencia
Este proyecto está licenciado bajo la licencia MIT - ver [LICENSE](LICENSE) para más detalles.