- households: handle ID clash on create (#72)
- add basic Survey structure and linking (#62)
- household: tabbed UI for household and respondent (#75)
- collection: require survey ID
- collection: add survey input to sensitisation screen
- gibsonify_api: add survey ID to Gibson Form model
- surveys: handle clash on create
- survey: handle import clash
- models: make surveyId unique
- survey: add import instructions
- survey: import survey from QR
- survey: export as QR
- surveys: view survey screen
- surveys: create functionality
- app: add Surveys screen to main tabs
- view and delete survey functionality
- repository: surveys CRUD
- models: new Survey model
- household: rebuild view fields on edit (#74)
- households: cancel subscription on bloc close (#73)
- households: cancel subscription on bloc close
- respondent: anthropometric data collection (#58)
- anthropometrics: non zero positive value validation
- respondent: view anthropometrics
- respondent: delete anthropometrics
- respondent: create anthropometrics
- models: add Anthropometrics
- new data structure and database storage (#57)
- add recipes help page
- add collections help page
- standardize collection duplication and deletion
- recipe: add dynamic measurements to ingredient form
- recipe: add dynamic measurements to details screen
- collection: clear measurement unit and value after method change
- add preliminary dynamic measurements
- collection: combine fourth pass preparation method fields
- standardize ingredient and cooking state icons
- add custom preparation method of food items
- add dynamic dropdown search sizing
- recipe: add dynamic dropdown sizing
- collection: add dynamic dropdown sizing
- implement recipe and collection feedback
- recipe: add custom cooking state field
- recipe: add helper text for saved recipes
- recipe: restrict saving if measurements are not filled
- gibsonify_api: add new measurement checks
- recipe: finalise hide ingredients and measurements feature
- recipe: add toggle to hide ingredients
- recipe: add toggle to hide measurements
- recipe: restrict probe editting when accessing via collection
- recipe: add recipe duplication feat, use modal sheet instead of slidable for deletion
- recipe: add ingredient duplication feature
- recipe: restrict ingredient deletion when recipe is saved
- recipe: add feature to restrict input if recipe is saved
- recipe: add new modified recipe implementation
- recipe: add recipe duplication
- recipe: add ingredients as identifier for recipes
- anthropometrics: record date only, no time
- collection: change to id based food item indexing
- recipe: custom cooking state error text condition
- recipe: fix render overflow error for ingredient page
- recipe: update modified recipe listtile
- recipe: update food description field view
- recipe: dropdownsearch api change after version bump
- collection: dropdownsearch api change after version bump
- remove error text for comments field
- recipe: restrict item deletion for standard recipes
- recipe: remove old modified recipe logic and fix saved recipe/ingredient logic
- recipe: disuse deprecated shareFiles
- gibsonify_api: remove old list of measurement units
- make measurement attributes identifiers shorter
- collection: pass only food item ids in events
- collection: use build context synchronously
- settings: remove deprecated launch in favor of launchurl
- home: change homepagestate to public
- collection: use const for constant constructor
- collection: change print call to exception raise
- add new viewedFromCollection parameter for code readability
- remove unnecessary argument for context popping
- rename edit probe page
- recipe: move showIngredients and showMeasurements to recipe bloc state
- recipe: rename modified recipe function for clarity
- recipe: handle unnamed ingredients
- recipe: handle unnamed recipes and probes
- recipe: remove dialog ingredient deletion
- recipe: remove ability to create standard recipe via collection
- recipe: remove slidable usage from recipes screen
- recipe: refactor error conditions using utils function
- recipe: set probe screen as default page for standard recipes
- change name of food item description field to comments
- add export of collections and recipes
- add recipe sharing functionality
- add preliminary recipe export
- add collection feature requests
- implement data saving to downloads folder
- add preliminary collection export
- gibsonify_api: add csv conversion for gibsons forms
- gibsonify_api: add string representations
- add read-only mode to collection
- add second visit reason field
- add second interview visit date field
- add interview finished in one visit field
- improve collection status and outcome view
- collection: add finish confirmation dialog
- enable collection duplication
- collection: add finished and unfinished text
- implement login screen and info
- login: integrate employee number logic to collections
- login: add employee number field to gibsons form model
- login: add verification of login fields for submission
- login: add employee number field logic to import
- login: add employee number to recipe model
- login: add employee number field to recipe csvs
- add collection completed functionality
- validate sensitization before moving on
- login: add login button on settings page
- login: add gibsonify logo to login screen
- login: format login page
- login: add MVP login page
- login: add local storage logic for login
- login: add login bloc
- login: add login model
- recipe: implement feedback on features
- recipe: add logic for replacing old recipes with new ones
- recipe: add logic to modify date upon recipe modification
- recipe: add date field for recipe list version control
- collection: change interview outcome to dropdownsearch
- collection: change picture chart input to dropdownsearch
- collection: change to dropdownsearch in preparation method
- collection: change to dropdownsearch in food source
- collection: change to dropdownsearch in time period
- collection: change to dropdownsearch in recall day
- collection: change food ingredients wording
- collection: change fourth pass snackbar text
- rename food description to food ingredients
- collection: set dropdown heights for measurements
- collection: reverse measurement unit and value order
- collection: add check boxes to fourth pass items
- collection: add number keyboard for measurement value
- recipe: add prompts to notiy user on recipe import status
- recipe: handle duplicate recipe imports
- recipe: implement basic recipe import
- add settings help page with app information
- settings: add source code link to settings help page
- settings: show copyright in settings help page
- add settings help page with app version
- update and simplify settings screen
- update item deletion
- add delete dialog to fourth pass
- simplify slidable background red color
- add long-press-to-delete option to third pass
- add delete dialog to third pass
- add long-press-to-delete option to first pass
- add delete dialog to first pass
- add long-press-to-delete recipe option
- standardize delete dialogs
- add long-press-to-delete collection option
- change collection form fields to tiles
- add deletion dialog to collections screen
- reverse slide to delete direction
- trim ingredient list and add generating script
- add script for generating ingredient list
- recipe: add EOL detection setting for csv import
- gibsonify_api: export recipe type according to template
- measurement export format ordering
- use single snack bar upon saving data
- correct export data tab to include import
- gibsons forms csv header whitespace
- gibsonify_api: change completed fields to finished
- collection: typo in finish page
- collection: keyboard covers bottom text input fields
- collection: change to unfinished upon duplication
- recipe: fix ingredient measurement field bug in recipe import
- recipe: fix date fields in import csv
- recipe: fix measurement field bug in recipe import
- collection: fourth pass validation and order
- login: use pushReplacementNamed instead of pushNamed for login page
- login: fix login page navigation
- gibsonify_api: update time period validator
- collection: measurement unit dropdown height
- collection: fourth pass last item confirmation
- saving using native back button or swipe
- recipe: override back button/swipe to save
- collection: override back button/swipe to save
- collection: temporarily remove long-press-to-delete
- fix wrongly named map key for argument passing for page navigation
- gibsonify_api: clean up helper functions structure
- gibsonify_api: simplify csv string updating
- improve naming of local saving of data
- move csv convertor functions to api
- remove deprecated functionality from blocs
- move data file export to standalone bloc
- collection: remove null check from second pass
- simplify recipe field names
- rename sync screen to import export
- rename collection completed to finished
- change comments to nullable string
- make interview outcome not completed reason nullable
- change interview outcome to nullable string
- change interview end time to nullable string
- make picture chart not collected reason nullable
- change picturechartcollected to nullable string
- improve sensitization validators readability
- change geolocation to nullable string
- change interview start time to nullable string
- change recall day to nullable string
- change sensitization and interview dates to nullable strings
- change respondent tel number to nullable string
- change respondent name to nullable string
- change household id to nullable string
- change food item preparationmethod to nullable string
- change food item description to nullable string
- change food item source to nullable string
- change food item timeperiod to nullable string
- gibsonify_api: change to collection literals
- collection: remove unused variable in third pass
- change food item name to nullable string
- recipe: simplify import logic
- recipe: reorder recipe import logic for readability
- recipe: rename variables for readability
- recipe: rearrange measurement fields and clean up error handling
- gibsonify_api: rename validators to plural
- collection: move and rename pop function
- collection: move food item deletion dialog class
- rename delete recipe to delete recipe dialog
- remove second ingredients source
- recipe: improve code readability
- recipe: rename bloc private functions
- recipe: standardise ingredients json fields
- recipe: remove unused dependency
- recipe: use named strings for page navigation
- recipe: refactor ingredient loading into bloc and store in state
- recipe: add helper functions to refactor bloc functions
- recipe: use maps instead of lists for arg passing
- email export of data
- remove html from export text
- collection: fourth pass card color upon confirmation
- collection: location status reset and snackbar usage
- collection: correctly display gps loading indicator
- reset selected screen when opening collections
- recipe: fix probe logic bug
- fix bug causing recipes to not save in device memory
- add collection feature requests
- add data saving to file
- change export button to floating action
- change collections deletion to slidable
- collection: feat(collection): switch to slidable deletion in fourth pass
- collection: switch to slidable deletion in first pass
- collection: add gps status outcomes
- recipe: add ingredients from retentionfactors.csv
- add export subject and text
- recipe: add ingredients from RetentionFactors.csv
- replace flutter_mailer by share_plus
- collection: add fourth pass screen switching
- collection: add new food item button to fourth pass
- collection: shorten add new food button text
- collection: add combined measurement functionality
- gibsonify_api: add helper, update measurement class
- recipe: implement requested recipe features
- add check if interview date is valid
- recipe: change item deletion constraint implementation
- recipe: add dummy dropdownfield as placeholder while waiting for asset loading
- recipe: add ingredients json as asset, async logic to call ingredients file and unlisted ingredient name logic
- recipe: change fluttertoast implementation to native snackbar
- add interview outcome not completed reason
- add picture chart not collected reason
- add check for confirmation of food items
- add intl phone number support
- recipe: add food item description to probe list
- recipe: constrain probe option and measurement deletion and add warning message
- collection: remove measurement unit sizes
- recipe: add auto capitalisation for text fields
- recipe: set default probe values
- recipe: implement multiple ingredient measurements logic
- recipe: create measurements class and reimplement ingredient measurements
- recipe: redesign following app feedback
- recipe: add probe resetting when selecting recipes
- recipe: add visibility widgets and probe logic
- add picture chart collected field
- add geolocation using gps
- recipe: add probe option validation logic
- recipe: refactor probes as class and add dropdown list
- collection: add delete button to fourth pass
- collection: add standard cup sizes
- collection: separate grams and millilitres units
- restrict measurement value to max 4 digits
- remove not applicable food source option
- collection: restrict sensitization dates to past
- restrict household id length
- recipe: add standard recipe checks and recipe saving
- recipe: implement recipe page states
- recipe: implement probes status check
- recipe: implement probes checkbox backend
- recipe: implement new probes page ui
- collection: correct const fields
- collection: change third pass card to use maps
- change collectionsscreen to stateless
- collection: change screen index to enum
- move screen index reset to collection bloc
- collection: change state screen index to final
- collection: move selected screen index to state
- collection: use measurement class
- recipe: rename variables to more accurate descriptions of variables
- collection: change fourth pass snack bar name
- recipe: replace Formz usage with Strings and validation
- recipe: remove Formz usage from recipe implementation
- rename recipe_item.dart to recipe.dart
- specify dependency versions
- recipe: rename files and text widgets for consistency
- recipe: rename recipe probes clearing function
- collection: add text to new food item button
- add app icon
- minor collection features
- add comments to collection
- add interview outcome
- add interview end time, finish collection page
- add recall day to collection and api
- add sensitization date, remove sensitization status
- change buttons and time periods display
- export saved data via email
- implement data download
- integrate data layer, collections, recipes
- integrate recipe to collection
- add local storage of recipes
- add data layer and multiple collections
- recipe: implement recipe types and probes
- add generated json methods for recipes list
- recipe: change to slidable delete buttons
- add multiple collections functionality
- add home bloc
- gibsonify_api: remove loadform method
- gibsonify_repository: remove loadform functionality
- gibsonify_repository: add loading multiple forms and form deletion functionality
- gibsonify_api: add functionality to delete a form
- gibsonify_api: add multiple gibsons forms saving functionality
- add manual json serialization to recipe models
- collection: add saving gibsons form functionality to passes
- add-loading-and-creating-functionality-to-collections-screen:
- collection: add data layer functionality to bloc
- add bloc local storage data layer
- add manual json serialization to collection models
- recipe: implement recipe probes
- recipe: implement recipe deletion
- recipe: implement ingredient deletion
- recipe: implement UUID recipe numbers
- recipe: implement non-standard recipes
- gibsonify_api: add pretty string representation of gibsons form
- collection: add basic functionality of all gibsons method passes
- collection: make any change to a food item result in unconfirming it
- recipe: add preliminary recipe implementation
- recipe: add logic for changing recipe/ingredient status
- recipe: add navigation logic to enable recipe/ingredient editing
- collection: add fourth pass ui and underlying bloc
- collection: add third pass ui and underlying bloc
- add collection third pass help page and underlying navigation
- collection: add interview start time field, picker, and logic to sensitization
- collection: add bloc and ui for deleting food items
- collection: change second pass wording for increased clarity
- add date picker to sensitization with formatting using intl
- collection: add second pass ui and bloc
- add second pass help page to collection and navigation
- collection: add dropdown form field for choosing food time period
- add ingredient form
- add first pass help page to collection and to navigation
- recipe: add rudimentary recipe form
- add demo display of collection on home page
- add sensitization help page to collection with routing in navigation
- collection: add sensitization input demo
- add system based dark mode
- collection: add blocbuilders with demo display of current collection state to third and fourth passes
- collection: add bloc, model and update collection page and screens with demo
- collection: add sensitization, first, second, third, and fourth pass screens
- add sync screen
- add new pages using feature-driven structure and update navigation
- add app screens and navigation
- recipes not saving when created from collection
- collection: first pass food item card typo
- collection: first pass food item card typo
- recipes json method bug
- pubspec confilct and merge dev branch
- duplicate key error in collections screen
- collection: sensitization screen bottom overflowed error
- recipe: fix renderflex error and bug with dropdown selection not showing
- recipe: fix bug with probelist keys updating too frequently
- recipe: fix issue with Bloc not updating for ingredient changes
- recipe: implement PR comments
- recipe: Fixed bug that blocked new recipe state managementand refactored old code
- collection: make dropdown items consistently display selected value
- collection: add missing space to sensitization help page
- collection: add interview date to get props method of equatable to add it to state
- correct app name to start with a capital letter
- home_page: change bottom navigation bar type to fixed to allow more than three items
- collection_page: rename appbar and body text to new collection instead of recipe
- gibsonify_api: rearrange code order for readability
- move recipe models to gibsonify api
- gibsonify_api: remove debugging print statements
- move collection models into repository and api
- make one class encompassing all fields of gibsons form
- collection: move fourth pass food card to its own file
- collection: move third pass food card dropdown menus to lists
- collection: move third pass food card to its own file
- collection: move second pass food card dropdown menus to lists
- collection: move second pass food card to its own file
- collection: move first pass time period items to a list
- collection: make a standalone file and widget for first pass food item cards
- recipe: rename ingredient screen to ingredient form
- collection: simplify household id validation check
- collection: change wording of sensitization date input error text
- collection: change controller based date text updating to key based
- recipe: remove unused focus/unfocus node logic
- collection: remove form field focus ui and logic
- collection: move first pass blank dropdown item to beginning
- collection: move sensitization screen help button to app bar
- collection: remove old logic related to food items
- change to feature-driven app architecture using flutter_bloc
- collection: remove equatable as a base class for collection and rename to gibsonsform
- collection: change sensitization screen form to formz inputs, add input models and demos
- collection: change sensitization, first_pass and second_pass screens to stateless widgets
- move app from main to separate file
- start a fresh flutter project