formstack 2.1.0
formstack: ^2.1.0 copied to clipboard
A cross-platform ResearchKit alternative for Flutter. Build dynamic forms and surveys with 30 input types, 35+ validators, consent flows, and JSON support.
Changelog #
All notable changes to this project will be documented in this file.
The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.
2.1.0 - 2026-04-02 #
Added #
booleaninput type - Yes/No toggle buttonsimageChoiceinput type - select from a grid of images with labelsReviewStep- displays all collected answers for review before submissionConsentStepwithConsentSectionmodel and 8 predefined section types (overview, dataGathering, privacy, dataUse, timeCommitment, studyTasks, withdrawing, custom)- Built-in progress bar UI with step counter ("Step 3 of 10") and percentage
- Result timestamps (
startTime,endTime) recorded per step for analytics - Static image support via
titleIconImagePath(asset or network URL) - Video URL support in
InstructionStepviavideoUrl dateRangevalidator withminDate/maxDateboundsResultFormatpublic constructor for custom validator subclassingBaseStepViewandFormStepViewexported for custom input widget creationStepResultandTaskResultclasses for structured result hierarchy (modeled after ResearchKit's ORKTaskResult)- Step lifecycle callbacks:
onStepWillPresent,onStepDidComplete - API methods:
getStep(),getStepResult(),getTaskResult(),exportAsJson() - ResearchKit migration guide in README with side-by-side Swift/Dart examples
- New exports:
ReviewStep,ConsentStep,ConsentSection,ConsentSectionType,BaseStepView,FormStepView,StepResult,TaskResult
2.0.0 - 2026-04-02 #
Added #
- 8 new input types:
slider,rating,nps,consent,signature,ranking,phone,currency - 12 new validators:
min,max,range,minLength,maxLength,pattern,minSelections,maxSelections,fileSize,iban,consent,compose FormStepproperties:helperText,defaultValue,semanticLabelQuestionStepproperties:minValue,maxValue,stepValue,minSelections,maxSelections,consentText,currencySymbol,phoneCountryCode,ratingCount- New exports:
RelevantCondition,ExpressionRelevant,DynamicConditionalRelevant,NestedStep,DisplayStep,UIStyle - Full JSON schema support for all new input types and properties
- Comprehensive example app with 10 demo screens
- Dartdoc comments on all public API classes and members
Changed #
- Renamed
formKitFormtoformStackFormacross codebase - Renamed
TextFeildWidgetViewtoTextFieldWidgetView - Renamed
inputBoder()toinputBorder()across all input fields - Renamed
intputtoinputin expression evaluators - Renamed
htm_field.darttohtml_input_field.dart - Renamed
mapview_field.darttomap_input_field.dart - Replaced
GlobalKeyanti-pattern withValueNotifierinBaseStepViewandCompletionStepView - Updated
index.htmlto modernFlutterLoader.loadinitialization - Updated README with complete documentation, screenshots, and JSON schema reference
Fixed #
- Memory leak: OTP field controllers recreated on every build
- Memory leak: verification code list growing indefinitely on rebuilds
- Memory leak:
addPostFrameCallbackfiring on every rebuild in text, nested, and completion views - Performance: image memory bloat from full-resolution decoding (added
cacheWidth/cacheHeight) - Performance: dynamic key-value controller text resetting on every build
- Fixed typos in class names (
_TextesultType,_MultipleChoiceesultType) - Fixed
nextFormSatcktypo informstack_form.dart - Cleaned up dead commented-out code in
htm_field.dartandweb_view.dart - Removed unnecessary imports across all internal files
- Added
cacheExtentto allListViewwidgets for smoother scrolling
Updated #
google_maps_flutter: ^2.14.0 -> ^2.17.0google_maps_flutter_web: ^0.5.14+3 -> ^0.6.2dio: ^5.9.0 -> ^5.9.2uuid: ^4.5.2 -> ^4.5.3file_picker: ^10.3.7 -> ^10.3.10webview_flutter: ^4.13.0 -> ^4.13.1google_maps: ^8.1.1 -> ^8.2.0flutter_lints: ^2.0.0 -> ^6.0.0 (example)
1.1.1 - 2024-11-15 #
Fixed #
- Memory leak in Google Places autocomplete stream subscription
- Component disposal in nested step views
- Undefined
mountedproperty in completion step view - Auto-trigger callback firing multiple times
Changed #
- Added cache size limit (50 items) to prevent unbounded memory growth
- Optimized image memory usage by clearing file results after encoding
- Optimized controller recreation to only occur when form step result changes
- Reduced unnecessary setState calls in base step view
- Added proper GoogleMapController disposal
- Added lazy loading for background animations
Updated #
webview_flutter: ^4.9.0 -> ^4.13.0dio: ^5.8.0+1 -> ^5.9.0uuid: ^4.5.1 -> ^4.5.2lottie: ^3.3.1 -> ^3.3.2file_picker: ^8.3.7 -> ^10.3.7google_maps_flutter_web: ^0.5.12+2 -> ^0.5.14+3google_maps_flutter: ^2.12.3 -> ^2.14.0http: ^1.4.0 -> ^1.6.0
0.7.4 - 2023-10-15 #
Added #
- Dropdown button with component styles (minimal and basic)
- Dynamic key-value widget