Input fields for Flutter standalone or within a form
Alternatives To Flutter_input
Project NameStarsDownloadsRepos Using ThisPackages Using ThisMost Recent CommitTotal ReleasesLatest ReleaseOpen IssuesLicenseLanguage
Flutter_form_builder1,23612177 days ago147July 13, 202257bsd-3-clauseDart
Simple form maker for Flutter Framework
5 days ago1bsd-2-clauseDart
flutter项目- 实现一些常用效果、封装通用组件和工具类
Card_settings4311015 months ago77October 08, 202122mitDart
A flutter package for building card based forms.
Form_bloc397516 months ago48December 06, 202194Dart
🔥 Dart and Flutter Package 🔥 Easy Form State Management using BLoC pattern 🔥 Wizard/stepper forms, asynchronous validation, dynamic and conditional fields, submission progress, serialization and more! 🔥
Reactive_forms35312a month ago96August 07, 202253mitDart
This is a model-driven approach to handling form inputs and validations, heavily inspired in Angular's Reactive Forms
Flutter_dynamic_forms127132 years ago13May 30, 202115mitDart
A collection of flutter and dart libraries allowing you to consume complex external forms at runtime.
Modal_progress_hud11650133 years ago10March 19, 20193mitDart
A simple modal progress HUD (heads-up display, or progress indicator) for flutter
123 days ago3February 02, 202012apache-2.0Dart
A flutter plugin to use convert Json to Form
2 months ago14mitDart
Flutter library to create beautiful surveys (aligned with ResearchKit on iOS)
3 months ago10September 02, 20222otherDart
🧪 Lightweight Flutter forms library
Alternatives To Flutter_input
Select To Compare

Alternative Project Comparisons

Flutter Input Widgets - Standalone or within a Form → flutter_input

This package provides input widgets (fields) to manipulate data. The data to manipulate is either a single variable or an entry in a map. The map can even be nested. Parameter path defines the key to access the entry in the map. To access an entry in a nested map, the keys must be separated by a single slash (/) character.

All input widgets share a common set of parameters and methods. A list of validators can be attached to each input widget.

Each input widget can be used standalone. If it finds a InputForm ancestor then it will automatically register itself to the form. The form provides methods to enable(), reset(), save() or validate() all fields at once.

Input Widgets

The following input widgets are available. See section Development below for building your own input widget.

  • InputCheckbox - Checkbox for data type bool
  • InputCountry - Dropdown to select a country (shows flags)
  • InputDate - Calendar based selection for data type DateTime (date part only)
  • InputDatePicker - A highly customizable date picker with week of year and multiple swipe actions
  • InputDateTime - Wheels for data type DateTime can be customized for date only, time only or both
  • InputDropDown<T> - Dropdown button for data type T
  • InputFavorite - A favorite button with selectable icon for data type bool
  • InputKeyboard - Text input for data type String, int or double
  • InputLanguage - Dropdown to select a language (Locale)
  • InputPassword - Text field with a switch to make obscured input visible (String)
  • InputRadio<T> - Radio button to select one value of type T
  • InputRating - Rating widget with selectable icons and a range slider for data type int
  • InputSlider - Slider for data type double between a minimum and maximum value
  • InputSpinner - Spinner with buttons for data type double to decrease or increase a value between a minimum and maximum
  • InputSwitch - Switch for data type bool

Common Parameters

All input widgets share a common set of parameters. All parameters are named and optional.

  • Key key - Identifier for the field
  • bool autosave = true - automatically saves any changed value. If autovalidate is true then the value will only be changed when there are no validation failures.
  • bool autovalidate = false - automatically validates changed values
  • InputDecoration decoration - e.g. for a label (see example)
  • bool enabled - to enable or disable user input. If not set then uses setting from InputForm or defaults to true (if there is no form).
  • T initialValue - sets the fields initial value. Overrides using the value from map.
  • ValueSetter<T> onChanged - invoked on every change of the input field value
  • ValueSetter<T> onSaved - invoked by save() which will be automatically called by InputForm.save().
  • String path - to access the value in map
  • List<InputValidator> validators - list of validators


The following validators can be given to parameter validators of an input widget. Each validator accepts the optional parameter message to set an individual error message if the validation fails.

  • after(DateTime date) - validates that the field value is after date
  • before(DateTime date) - validates that the field value is before date
  • future - validates that the DateTime field value lies in the future
  • max(num maxVal) - validates that the num field value is not larger than maxVal
  • maxLen(num maxLen) - validates that the length of the String field value is not longer than maxLen
  • min(num minVal) - validates that the num field value is not smaller than minVal
  • minLen(num minLen) - validates that the length of the String field value is not shorter than minLen
  • notNull - validates the the field value is not empty
  • past - validates that the DateTime field value lies in the past


Each input widget will automatically register itself if it finds an InputForm ancestor. Otherwise it will just run standalone. It will use initialValue for its value to display. If initialValue is null then it will use the value from map[path] if both are set. If map is not set, then the field will use map from an InputForm ancestor (if there is any).

Saving a modified value will happen

  • on any change if autosave = true (which is the default)
  • when save() is called
  • when save() is called on the InputFormState

The changed value will be written to the map at path if both were supplied. Also method onSave() will be invoked with the changed value.


For a complete example see example/main.dart.


The highly customizable InputDatePicker allows you to choose a date from a calendar page which also shows the week of the year. It provides spinners, swipes and a dropdown to select the month. The year can even be entered as text. All parts can be customized by DatePickerStyles.



To create a new input field for data type T follow these steps:

  1. Copy one of the included class files.
  2. Rename the class widget and its state to your new one.
  3. Replace T with the value type of your new input field.
  4. Adapt parameters and leave the call to super() with all the common parameters.
  5. Adapt method build( BuildContext context) in the state class. It must end with return super.buildInputField( context, ... where ... is the code to display your new field widget.


This package also contains some utilities.

  • InputUtils.convertToType() converts a value to a given target type.
  • InputUtils.readFromJson() reads a value from a nested map.
  • InputUtils.writeToJson() writes a value into a nested map.
  • See date_helper.dart for extensions on DateTime for weekOfYear, julianDay and more.

To Do

  • [X] create a customizable calendar picker with week numbers
  • [X] create a text input field for int and double
  • [ ] create an input widget for a calendar with events
  • [ ] create an input widget to select multiple choices like a multi-select list
  • [ ] add some images to this documentation
  • [X] internationalize the whole package
  • [X] create an input widget to change the language within the app
Popular Form Projects
Popular Flutter Projects
Popular User Interface Components Categories
Related Searches

Get A Weekly Email With Trending Projects For These Categories
No Spam. Unsubscribe easily at any time.