A Jetpack first forms library.
JetpackForms compartmentalizes data management and validation logic out of ViewModels and into reusable field and validation objects.
JetpackForms automatically publishes to Github Packages. To use the core library in your project, add the registry to your settings.gradle file:
pluginManagement {
repositories {
maven {
url = uri("https://maven.pkg.github.com/BenMMcLean/JetpackForms")
}
}
}
then add your dependency to your app level build.gradle file:
dependencies {
implementation 'cl.benm.forms:forms:LATEST_VERSION'
}
To use the forms library, create a new form with any of the fields:
val form = Form.of(listOf(
TextFormField(
"name",
listOf(RequiredValidator()),
TextFormFactor.TEXT
),
TextFormField.phone("phone", true) // Some fields have shortcut constructors for common data types
))
fields can then be accessed with:
form.getField<String>("name")
Out of the box, JetpackForms can also extract data from form fields into a map or flat Kotlin object:
val contentAsAMap = form.extract(MapFormExtractor())
val contentAsAPoko = form.extract(PokoFormExtractor(
target = NameAndPhone::class
))
In the future, a compose library is planned that would provide a simple and automatic interface for rendering form fields is planned. In addition, support for file selectors is planned.