research_package 3.2.0
research_package: ^3.2.0 copied to clipboard
A Flutter framework for obtaining informed consent, showing surveys and collecting results.
3.2.0 #
- Fix: an
RPStepReorganizerRuleno longer removes the step it was triggered from, which leftBACKdead and stranded the task. It also reorganizes from the steps as defined, so going back and changing the answer can select a branch an earlier answer had removed. - Fix:
BACKfollows the steps actually visited instead of comparing againsttask.steps.first, and the task ends when the task says there is no next step rather than when the current step is last in the list. Both stranded tasks whose navigation rules route to the first or past the last step. - The confirmation shown when leaving a task now names what is being left and
what leaving costs - "Leave survey?" / "Your answers will not be saved." over
"Discard results and quit?" - and its destructive action reads
LEAVErather thanYES, which answers a question the participant may not have read. A consent task says it has no consent yet instead of naming answers it never had. Translated in all seven supported languages.- The dialog can now be dismissed by tapping outside it, which keeps the task.
- Styling now follows the ambient Material theme: the cancel dialog,
BACK,DONEand the choice/text/slider/integer bodies take their colours and text styles fromThemeDatainstead of colouring themselves.- Breaking: the widgets no longer read
CupertinoTheme.primaryColor. An app that styled Research Package by wrapping it in aCupertinoThemeshould setThemeData.colorSchemeinstead.
- Breaking: the widgets no longer read
- Requires
carp_themes_package0.2.1, which fixes borders and dividers rendering opaque black. - Fix: requesting
RPPermissionType.bluetoothon Android now asks for the "Nearby devices" pair (BLUETOOTH_SCAN+BLUETOOTH_CONNECT) introduced in Android 12, instead of the legacy Bluetooth permission, which is granted without ever showing a dialog. Both are requested in one call, so the user sees a single dialog; if either is refused, that status is reported.
3.1.1 #
- Fix:
RPUITaskno longer pops its route on cancel or finish when it is the only route in the navigator's stack (e.g. a redirect target). Popping is guarded byNavigator.canPop(); when there is nothing below, navigation is left to theonCancel/onSubmitcallbacks.
3.1.0 #
- New
RPPermissionType.ignoreBatteryOptimizations, for asking to be exempt from Android's battery optimization so sensing keeps running in the background. Android opens a settings page rather than a dialog, and on iOS — where background execution is granted through the background modes the app declares — it resolves toRPPermissionStatus.unsupported. - New
RPConsentSectionType.BackgroundSensing, the consent section which explains background data collection and asks for the exemption above. - New
RPConsentSectionType.ActivityRecognition,Bluetooth,Notification,MicrophoneandCamerasections, so a study asking for several permissions explains each on its own screen rather than bundling them. Each has a localized default title and its own illustration. - Hungarian (
hu) and Chinese (zh) translations.
3.0.0 #
- Localization now supports nested translation keys. A nested json object is
flattened into a dot-separated path, so
{"pages": {"task_list": {"title": ...}}}and{"pages.task_list.title": ...}are equivalent and existing flat translation files keep working unchanged. - Localization now supports
{{placeholder}}interpolation via the newargsargument oftranslate(), e.g.translate('greeting', args: {'name': 'Bo'}). A placeholder with no matching argument is left in place rather than rendered blank. A single brace stays literal. - Localization now supports plurals via the new
countargument oftranslate(), using the_zero,_one,_two,_few,_manyand_otherkey suffixes. The category is selected with the CLDR rules of the locale, andcountis available to the translation as{{count}}._zerois used for a count of exactly 0 in any language when present; a missing category falls back to_other, and a key with no plural variants falls back to the key itself. translate()remains backwards compatible —translate('key')behaves exactly as before, including returning the key when it is not translated.LocalizationLoader.loadnow returnsFuture<Map<String, dynamic>>so a loader may return nested translations. Existing loaders returningFuture<Map<String, String>>are still valid overrides and need no change.MapLocalizationLoaderaccordingly takesMap<String, Map<String, dynamic>>.- New dependency:
intl: '>=0.19.0 <0.21.0', for the CLDR plural rules. - Added support for requesting OS permissions in context during informed consent
(issue #171). A consent section now declares the permissions its text explains
the need for via
RPConsentSection.permissions, and tapping "NEXT" on that section triggers the native permission dialog — but only when the step opts in withRPVisualConsentStep.askPermission: true. Without that flag nothing is requested and the flow behaves exactly as before. - Added
RPPermissionType(location, locationAlways, microphone, camera, notification, activityRecognition, sensors, bluetooth, health) andRPPermissionStatus. - Added
RPPermissionResult, added to the task result under the identifier of theRPVisualConsentStep, holding the status of every permission which was asked for. A denied permission is recorded but never blocks the participant. - Added
RPPermissions.request()for asking for a single permission outside a consent flow. RPPermissionType.healthis now requested by Research Package itself, through thehealthpackage. Health data is not one permission — HealthKit and Health Connect authorise each of the 100+ data types separately — so a section which lists it must also list the types it needs in the newRPConsentSection.healthDataTypes; without them there is nothing to ask for and it resolves toRPPermissionStatus.unsupported.HealthDataTypeis re-exported, andRPPermissions.requestHealthData()is public for asking outside a consent flow. Note that on iOS the resulting status is optimistic: HealthKit does not disclose whether read access was granted, sograntedmeans the authorisation sheet was shown without error.- New dependency:
health: '>=13.0.0 <14.0.0'. This raises the Android requirement tominSdkVersion 26for every app using research_package, and apps which ask for health data must extendFlutterFragmentActivityand declare the Health Connect entries in their manifest — see the "Health data" part of the README's platform setup. - New dependency:
permission_handler: '>=12.0.0 <13.0.0'. Apps which useaskPermissionmust declare the permissions they ask for natively — see the "OS permissions" section of the README. Apps which do not use it need no setup. - Added a "BACK" button to
RPUIVisualConsentStep, for re-reading earlier sections — the step used to be forward only. It is hidden on the first section, and on a section which is still going to open a permission alert. Once that section's permissions have been asked for, "BACK" reappears on it. - Breaking: an informed consent flow — an
RPOrderedTaskcontaining anRPConsentReviewStep— no longer shows the close button in the top bar, and the visual consent step no longer shows a "CANCEL" button. Apple requires that a screen explaining an upcoming permission request offers no way out other than the system alert it leads to, and the permission sections sit inside this flow. Such a task is now left by pressing "DISAGREE" on the review step. This also removes an inconsistency: the old "CANCEL" button popped the route directly without callingRPUITask.onCancel, which "DISAGREE" does call. Tasks which are not consent tasks keep their close button. - Breaking:
RPUIVisualConsentStepnow takes theRPVisualConsentStepasstep:instead of takingconsentDocument:. This only affects code which instantiates the widget directly, which is not normally needed — the step builds it. RPUIVisualConsentStepStatenow keeps itsPageControllerin the state and disposes it, instead of creating a new one on every build.- Added
RPUITask.carouselBarBuilderfor replacing the default carousel bar (logo, "x of y" progress and close button) with a custom widget. Returnconst SizedBox.shrink()to hide the bar entirely. When the builder is given,carouselBarImage,carouselBarHorizontalPadding,carouselBarVerticalPaddingandcarouselBarBackgroundColorare ignored. Note that a replacement bar should offer its own way to cancel the task. - Added
RPUITask.nextButtonTextto override the label of the Next button. Whennullthe localized'NEXT'key is used as before. Applies to the whole task, not to individual steps. - Added
RPStep.nextButtonTextso an individual step can label its own forward action (e.g. "Start Practicing"). It takes precedence overRPUITask.nextButtonText, which in turn falls back to the'NEXT'key.
2.5.0 #
- upgrade to
carp_serializable^3.0.0
2.4.1 #
- Migrated to
carp_themes_package0.2.0: widgets now read colors and text styles from the standardThemeData(ColorScheme,TextTheme,scaffoldBackgroundColor) instead of the removedCarpColorsextension andfsXXtext constants. - Lowered the minimum Dart SDK to
3.12.0.
2.4.0 #
Update dependencies:
sdk: ^3.12.2carp_themes_package: ^0.0.5carp_serializable: ^2.0.1signature: ^6.3.0json_annotation: ^4.12.0audioplayers: ^6.7.0video_player: ^2.11.1
- Updated example apps
- Improve typechecking for bottom bar visibility
2.3.0 #
- Adding custom padding to carouselBar
2.2.0 #
- Removing Research Package styles, integrating carp_themes_package instead.
- Added support for new media types in RPInstructionStep class. Media types include
- Video
- Audio
- Image Media can be accessed by providing a url in the protocol under an RPInstructionStep by setting it as "video_step": "url".
- Changed color of BACK button in task to be same as NEXT button.
2.1.1 #
- minor visual updates
2.1.0 #
- updating RPColors theme to act as carp_styles_package temporarily
2.0.2 #
- fixing nullable variables
2.0.1 #
- fixing asset path
2.0.0 #
- Redesign of informed consent
- Redesign of app bar
- Addition of research_package_styles
- Major flutter upgrade for example app
- Major gradle upgrade for exmaple app
1.8.0 #
- Added support for a
HealthDataCollectiontype in theRPConsentSectionTypewhich allow for showing what health data is being collected as part of an informed consent flow. - Added and example incl. translations of a
HealthDataCollectiontype
1.7.3 #
1.7.2 #
- Upgrade of serialization
- Upgrade to
carp_serializablev. 2.0 - Now using camelCase for JSON.
- Support for deserialization of all
RPResultclasses and sub-classes (polymorphic serialization using thecarp_serializablepackage) (issue #83)
- Upgrade to
- Temporary fix of
rxdartissue (#131). - Small upgrade to text and email in demo app.
- Added support for Spanish (ES) in demo app.
1.6.0 #
- Add optional
footnoteoption to variousRPStepsand add it to the UI
1.4.3 #
DoubleQuestionFormatandIntegerQuestionFormatnow open a keyboard with only numbers, given that is the only accepted format.TextAnswerFormatnow has the possibility of disabling all the keyboard "helpers" (e.g., auto corrector, suggestions).- Fix of issue #95.
- Fix of a case in which an
RPStepcould be null. - Fix of
LateInitializationErrorby removing late variables.
1.4.0 #
stepsinRPFormStepare now calledquestions.- Improvements to API documentation
- Upgrade to Dart 3 and Android APK upgrades
- Fix of issue #86
1.3.2 #
- Added translation to French and to Portuguese (Portugal version).
- Added autoFocus to
TextAnswerFormat. - Added autoSkip, timeout, and autoSubmit to
FormStep. - Added autoSkip, timeout, and autoFocus to
QuestionStep. - Added autoSkip and showTime to
TimerStep. - Adapted colors in Research Package for the Cupertino theme.
- Added a
RPDoubleAnswerFormat.
1.3.1 #
- Upgrade to
carp_serializable: ^1.1.0. Note that this entails that all polymorphic json serialization uses the type key__type. Hence, the json format for all the domain classes is NOT compatible with earlier versions. - Update of Material Design names for title, caption, and body text.
- Added the
ResearchPackage.ensureInitialized()static method to be compliant with the other CARP packages.
1.2.1 #
- Added usage of
detailTextonRPChoices. - Small bug fixes
1.2.0 #
- Upgrade of
pubspecdependencies to latest versions.
1.1.0 #
- Support for initializing json serialization by calling the
ResearchPackage()factory method. This allows for dynamic loading of survey or informed consents from a json configuration.
1.0.0 #
- First stable release
RPActivityStepmade serializable.- Upgraded to Dart 2.18 and Fluter 3
- Refactoring to comply to official Dart recommended lint rules
- Upgrade of several constructors to use
superwhich break backwards compatibility to version 0.9.3 - Update of demo app
- Update and clean up in API documentation.
0.9.3 #
- Changed dependency from carp_core to carp_serializable, to reduce unnecessary dependencies.
0.9.2 #
- Added a
unfocusbetween question to avoid the keyboard remaining on the screen after answering a question.
0.9.1 #
- Fixed a big in the signature during consent review.
0.9.0 #
- Research Package now translates the
TaskResultand steps from the localization keys to the localized values. - Small updates to the example app
- Small fixes to localization in the package and the example app.
0.8.0 #
- Updated deprecated theme usages.
- Added the
RPTimerStepand serialization. - Added
Audiofileplayerplugin for theRPTimerStep - Updated README
- Updated .gitignore
0.7.3 #
- Update to
carp_corev. 0.33.0 - Misc. cleanup in Android example app configurations
0.7.2+3 #
- Updated
signatureto 5.0.0
0.7.2+2 #
- Changed asset urls to be specific urls of the assets
- Added a new "Checkmark" in the RPCompletionStep
0.7.2+1 #
- Changed brightness input on CupertinoDateTimePicker for
RPDateTimeAnswerFormatto use Theme brightness instead of System brightness.
0.7.2 #
- added base method for calculateScore() method into RPActivityStep class. Which is overridden by any child class that extends RPActivityStep
0.7.0 #
- Removed Boolean questions, including answer format for simplicity and navigation changes. (Use regular RPChoices now)
- Removed Predicate Navigation rules, for simplicity and navigation changes. (Use
RPStepJumpRulenow) - JSON serialization to/from json, now retains the navigation rules added. Previously the navigation was lost after conversion.
- Updated example app
- Fixed issues #58, #59, #60, #61
- Small bugfixes
0.6.7 #
- Added Activity Steps as
RPActivityStep- A class that allows for the making of Cognitive Tests - Added Activity Result as
RPActivityResult- A class for storing the result of a Cognitive test - Added
RPActivityEventLogger- used for logging small events during eachactivity step - Include json serialization for added classes.
0.6.6 #
- update to
carp_corev. 0.31.0
0.6.5+1 #
- update to UI rendering in the Informed Consent based on PR #51.
- update to UI rendering in the Informed Consent based on PR #50.
- updating README to link to the new tutorials on
carp.cachet.dk.
0.6.4 #
RPLocalizationsDelegatenow support multipleloaderswhich can merge translations from several sources.
0.6.3 #
- Changed background color element from backgroundColor -> scaffoldBackgroundColor.
- Updated RPConsentSection to also take a custom title on predefined section types.
- Fixed an issue with the cupertinoDatePicker in dark mode, that caused the picker to not follow the theme values.
- Added headline6 to questions step titles.
0.6.2 #
- Additional customizable text in the theme
- Example app updated
- Textfield hintText uses the 'text' parameter.
0.6.1 #
- Bug fix (Missing signature)
0.6.0 #
- Null safety added.
- Theming updated using PR #24
- Minor fixes
0.5.5 #
- small update to robustness and debug info in
RPLocalizations
0.5.4 #
- update to the localization model (
RPLocalizations) so that:- the localization of the embedded text in RP is now part of RP (you don't need to worry about this anymore)
- localization of informed consent and survey is (still) in the
assets/lang/folder - support for custom [LocalizationLoader]s which can load translations from other sources
- another localization class has been added
AssetsLocalizations, which can load translations from json files. This is useful for e.g. simple localization of static text in an app - example app update to illustrate the use of both types of localization
0.5.3+1 #
- small updates to documentation
- making
RPTaskserializable instead of abstract - fix to
translatemethod
0.5.2 #
- update of json serialization in informed consent domain model
- updated example and unit test on
RPConsentSectionfor passive data collection
0.5.0 #
- Included the carp_core which allow for de/serialization of RP models to/from json, while also supporting polymorphism (e.g., that an
RPAnswerFormatcan have different implementations). See issue #12. - all
.withParams()and similar constructors have been replaced with named constructors (as recommended in Dart). - added unit test to verify json de/serialization.
- all examples and the demo app updated accordingly.
0.4.1 #
- Fixed error in consent that caused it to have 2 top bars
- Updated docs
- Score fixes
0.4.0 #
- Merged beta.1.0
- Added RPTextAnswerFormat (a format for getting written answers from the user)
- Minor bugfixes
0.4.0-beta.1.0 #
- Updated UI for several elements:
- RPQuestionStep (incl. most answer formats)
- RPFormStep
- RPInstructionStep
- RPVisualConsentStep
- Added new consent types:
- User data collection
- Passive data collection
- Added simple support for theming in Research Package
- Minor bug fixes
0.3.2+3 #
- updates to documentation of RP and example app
0.3.2+2 #
- Added RPJumpStepRule - A navigation rule to jump to questions based on the chosen answer to the question.
0.3.2+1 #
- Revert of AnimationController
0.3.2 #
- Updated
AnimationControllers to Flutter 1.22 - Removed "Activity Steps" to be released in a separate package
- Merged small-scale branching feature
- Minor bugfixes
0.3.1+1 #
onCancelcallback changed to only optional
0.3.1 #
onCancelcallback added to Tasks
0.3.0 #
RPActivityStepandRPActivityResultadded with including UI.- 8 cognitive tests added as activity steps.
- Dependencies updated
- Minor bugfixes
0.2.1 #
- FormStep now supports Slider, Image, Date and Boolean Answer Formats as well
0.2.0 #
- Support for Navigable Tasks
- Branching support with
RPDirectStepNavigationRuleandRPPredicateStepNavigationRule - Navigation to previous questions
- Currently supports:
- Boolean Answer Format
- Choice Answer Format
- Branching support with
- Localization added
- Demo app available now in English and Danish
- Support for new Answer Format
- Boolean
- UI updates, bug fixes
0.1.2 #
- Support for new Answer Formats
- Slider
- Date and Time
- Image Choice
rx_dartdependency updated to^0.23.0- Small bug fixes and documentation update
0.1.1 #
json_annotationdependency updated to^3.0.0rx_dartdependency updated to^0.22.0
0.1.0 #
- Form Step feature added
- Bug fixing
0.0.4 #
- Example application added
0.0.3 #
- Initial release for Pub
- Support for three Answer Formats
- Single Choice
- Multiple Choice
- Integer
0.0.2 #
- Added initial support for serialization to/from JSON
- JSON serialization is available for these classes:
RPAnswerFormatRPChoiceAnswerFormatRPIntegerAnswerFormatRPConsentDocumentRPConsentSectionRPSignatureResultRPStepResultRPTaskResultRPChoice
0.0.1 #
- Initial release
- Entire framework done
- Support for SingleChoice question type