Git Product home page Git Product logo

research.package's Introduction

Research Package

pub package style: effective dart github stars MIT License

Research Package is a Flutter package for building research study apps on Android and iOS using Flutter.

Research Package is a Flutter implementation of the Apple ResearchKit available for iOS (just like ResearchStack is for Android). The overarching goal of ResearchPackage is to enable developers and researchers to design and build cross-platform (iOS and Android) research applications using the same codebase.

Research Package is designed from the ground up to meet the requirements of most scientific research, including capturing participant consent, extensible input tasks, and the security and privacy needs necessary for IRB approval. The main features of Research Package are:

Research Package is part of the overall Copenhagen Research Platform (CARP) with also provides a Flutter package for mobile and wearable sensing called CARP Mobile Sensing. The Pulmonary Monitor app shows how mobile sensing can be combined with collection of survey data from users.

Documentation

There is a set of tutorials, describing:

The Research Package Flutter API is available (and maintained) as part of the package release at pub.dev.

Example Application

There is an example app which demonstrates the different features of Research Package as implemented in a Flutter app.

Who is backing this project?

Research Package is made by the Copenhagen Center for Health Technology (CACHET) and is an important component in the Copenhagen Research Platform (CARP), which is used in a number of applications and studies. The current project maintainers are Mads Vedel Saaby Christensen and Jakob E. Bardram.

How can I contribute?

We are more than happy to take contributions and feedback. Use the Issues page to file an issue or feature request. Besides general help for enhancement and quality assurance (bug fixing), we welcome input on new answer types.

License

This software is copyright (c) Copenhagen Center for Health Technology (CACHET) at the Technical University of Denmark (DTU). This software is available 'as-is' under a MIT license.

research.package's People

Contributors

appliedrd avatar bardram avatar barnabashomola avatar kalin avatar luciamontesinos avatar madsvschristensen avatar ossi0004 avatar panosfunk avatar slimshadyiam avatar tiloc avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar

research.package's Issues

RPOrderedTask progressbar overflows with more than 16 tasks && progressbar stops working

Unfortunately the package does not seem to work with bigger surveys.
After 17 tasks the progress bar overflows, even when there is plenty of room to go on the left side.

There is a RenderFlex overlow inside the Row.
lib/src/ui/RPUITask.dart:219:19

photo_2021-11-16_20-58-53

══╡ EXCEPTION CAUGHT BY RENDERING LIBRARY ╞═════════════════════════════════════════════════════════
The following assertion was thrown during layout:
A RenderFlex overflowed by 7.6 pixels on the right.

The relevant error-causing widget was:
  Row
  Row:file:///home/em/snap/flutter/common/flutter/.pub-cache/hosted/pub.dartlang.org/research_package-0.6.7/lib/src/ui/RPUITask.dart:219:19

The overflowing RenderFlex has an orientation of Axis.horizontal.
The edge of the RenderFlex that is overflowing has been marked in the rendering with a yellow and
black striped pattern. This is usually caused by the contents being too big for the RenderFlex.
Consider applying a flex factor (e.g. using an Expanded widget) to force the children of the
RenderFlex to fit within the available space instead of being sized to their natural size.
This is considered an error condition because it indicates that there is content that cannot be
seen. If the content is legitimately bigger than the available space, consider clipping it with a
ClipRect widget before putting it in the flex, or using a scrollable container rather than a Flex,
like a ListView.
The specific RenderFlex in question is: RenderFlex#6eea4 relayoutBoundary=up5 OVERFLOWING:
  creator: Row ← Expanded ← Row ← ConstrainedBox ← Container ← Column ← MediaQuery ← Padding ←
    SafeArea ← _BodyBuilder ← MediaQuery ← LayoutId-[<_ScaffoldSlot.body>] ← ⋯
  parentData: offset=Offset(98.2, 24.5); flex=2; fit=FlexFit.tight (can use size)
  constraints: BoxConstraints(w=196.4, 0.0<=h<=56.0)
  size: Size(196.4, 7.0)
  direction: horizontal
  mainAxisAlignment: center
  mainAxisSize: max
  crossAxisAlignment: center
  textDirection: ltr
  verticalDirection: down

Parkinson's assessment task fails on page 2


════════ Exception caught by widgets library ═══════════════════════════════════
The following _TypeError was thrown building RPUIFlankerActivityBody(dirty, dependencies: [_LocalizationsScope-[GlobalKey#d467f]], state: RPUIFlankerActivityBodyState#56b4d):
Null check operator used on a null value

The relevant error-causing widget was
MaterialApp
carp_study_app.dart:165
When the exception was thrown, this was the stack
#0      RPUIFlankerActivityBodyState.build
rpui_flanker_activity_body.dart:120
#1      StatefulElement.build
framework.dart:5198
#2      ComponentElement.performRebuild
framework.dart:5086
#3      StatefulElement.performRebuild
framework.dart:5251
#4      Element.rebuild
framework.dart:4805
#5      ComponentElement._firstBuild
framework.dart:5068
#6      StatefulElement._firstBuild
framework.dart:5242
#7      ComponentElement.mount
framework.dart:5062
...     Normal element mounting (70 frames)
#77     Element.inflateWidget
framework.dart:3971
#78     Element.updateChild
framework.dart:3708
#79     SliverMultiBoxAdaptorElement.updateChild
sliver.dart:857
#80     SliverMultiBoxAdaptorElement.performRebuild.processElement
sliver.dart:758
#81     SliverMultiBoxAdaptorElement.performRebuild
sliver.dart:819
#82     SliverMultiBoxAdaptorElement.update
sliver.dart:734
#83     Element.updateChild
framework.dart:3686
#84     SingleChildRenderObjectElement.update
framework.dart:6442
#85     Element.updateChild
framework.dart:3686
#86     ComponentElement.performRebuild
framework.dart:5111
#87     Element.rebuild
framework.dart:4805
#88     StatelessElement.update
framework.dart:5162
#89     Element.updateChild
framework.dart:3686
#90     RenderObjectElement.updateChildren
framework.dart:6093
#91     MultiChildRenderObjectElement.update
framework.dart:6595
#92     _ViewportElement.update
viewport.dart:236
#93     Element.updateChild
framework.dart:3686
#94     SingleChildRenderObjectElement.update
framework.dart:6442
#95     Element.updateChild
framework.dart:3686
#96     SingleChildRenderObjectElement.update
framework.dart:6442

Downloadable surveys

We are looking into adding this to an existing Flutter app.

  • Really happy that you selected Flutter
  • This looks like a great contribution to the community for serious research.

Has any thought gone into making the surveys a downloadable resource from a server?

  • admins could change the surveys on the fly
  • changes to surveys would not require an app update.

Thanks,

How to add TextField answer format?

I would like to thank you for making this package available open-source. This package makes it so much easy to create a survey application.

I have a question. Is there an easy way to add the TextField answer format? I looked RPIntegerAnswerFomat and RPUIIntegerQuestionBody dart files and attempted to create a text answer format, but it didn't work. I am new to Flutter so I would very much appreciate it if you could provide me any tips or instructions.

An example of a survey question is Race/Ethnicity as below. If a participant answer "Other", instruct the participant to enter other race by providing a text field. I use the FormStep for this.

Race/Ethnicity (check all that apply)
(multiple choice question)

  • African American/Black
  • American Indian or Alaska Native
  • Asian
  • Cajun
  • Caucasian/White
  • Hispanic
  • Other

If you answered "Other", please enter other race.
<<Text field here
>>

unable to add another language to RPLocalizations in research_package 0.6.6

research_package 0.6.6 runing on android pixel 5

  1. create a new flutter project with research.package/example/
  2. duplicate da.json to fr.json to assets folder and pubspec.yaml
  3. in main.dart , add Locale('fr') to supportedLocales: [ ]

test 1
in main.dart, change if (supportedLocale.languageCode == locale!.languageCode) to if (supportedLocale.languageCode == "da"). debug flutter. app runs successfully in german

test 2
in main.dart, change if (supportedLocale.languageCode == locale!.languageCode) to if (supportedLocale.languageCode == "fr"). app throws exception

console:
Syncing files to device Pixel 5...
I/flutter (17886): AssetLocalizations - loading 'assets/lang/fr.json'
I/flutter (17886): RPLocalizations - loading 'packages/research_package/assets/lang/fr.json'
Screenshot from 2021-11-02 18-15-52

asset_bundle.dart line 224:
throw FlutterError('Unable to load asset: $key');

and $key is packages/research_package/assets/lang/fr.json

this should be assets/lang/fr.json, right?

this worked correctly in research_package 0.4.1 . For now, I will revert back

love this package!!!! great job.
Ted

How to obtain single StepResults from TaskResults?

Hello,
i don't know if it is the right place here, but i am a bit lost when trying to retrieve Results from my Surveys created with RP. This is my task:

`class SurveyTaskRoute extends StatelessWidget {
@OverRide
Widget build(BuildContext context) {
return RPUITask(
task: linearSurveyTask,
onSubmit: (RPTaskResult result) {
resultCallback(result);
},
onCancel: (RPTaskResult? result) {
print(result.toString() + ' --- canceled');
},
);
}
}

void resultCallback(RPTaskResult result) {
// Do anything with the result
print(result.getStepResultForIdentifier('booleanQuestionStepID'));
print(result.results);
}

RPOrderedTask linearSurveyTask = RPOrderedTask(
identifier: "surveyTaskID",
steps: [
instructionStep,
smokingQuestionStep,
smokingQuestionStep2,
],
);
`
When finishing the task, the Callback-function just prints the Results as sepcified in RPResult .toString() method:
I/flutter ( 6079): RPStepResult - identifier: booleanQuestionStepID
I/flutter ( 6079): {booleanQuestionStepID: RPStepResult - identifier: booleanQuestionStepID, booleanQuestionStepID2: RPStepResult - identifier: booleanQuestionStepID2}

How can i retrieve the actual value of the answers?
Would be so glad if someone could help, thanks a lot.

Cannot specify a title in RPConsentSection

When creating a RPConsentSection the title is automatically assigned to the English version, even if another title is provided. This is an bug in the constructor which looks like this:

  RPConsentSection(
      {required this.type,
      String? title,
      this.summary,
      this.content,
      this.dataTypes,
      this.customIllustration}) {
    assert(type != RPConsentSectionType.Custom || title != null, "If a you are creating a Custom ConsentSection, then a title must be provided.");
    this.title = (type == RPConsentSectionType.Custom) ?
      title! : _localizedTitleForConsentSectionType(type);
  }

It should not call the _localizedTitleForConsentSectionType() method, if a (custom) title is provided.

Slider doesn't allow user to do next if the default value is the value the user wants to input

sliderRP

In above image, if user wants to input 0 the user must move the slider away from 0 then back to 0. Maybe just allow next to be pressed immediately?

Also for the user to more easily understand that it is a slider, maybe a default value could be useful? For example in this mood slider you don't want to "assume" that the user is in a bad mood, but rather in a neutral (50%) mood.

Localization Null exception

Hi everyone,

I get a null exception using the form from the example in my project:

Another exception was thrown: NoSuchMethodError: The method 'translate' was called on null.
Receiver: null
Tried calling: translate("Skip these questions").

I believe this has something to do with null-safety, as I set my environment to

environment:
sdk: ">=2.12.0 <3.0.0"

I added
// @Dart=2.9 to my routes referring to research package to handle the non-null safety, but it seems to cause troubles.

Does anyone has a pointer for a fix?

Best
Ulf

Current status of the library

Hello!

We are evaluating the usage of flutter for a new app for medical surveys that we started developing. Is there any demo app or test for your library?

BR,

Juan

upgrade dependency: signature to v3.2.0

There were breaking changes in signature 3.+

This in itself is not a major problem but I am using Research Package currently in a project along flutter_form_builder which relies on signature 3.+, so I could not build the app before bringing Research Package's dependency to 3.+ as well...

JSON Serialization not recursive

Hi everyone,

calling .toJson() on a RPTaskResult, does not encode recursively children RPStepResult into an expected JSON consisting of basic types, dictionaries or lists.

{identifier: surveyTaskID, start_date: 2021-08-09T10:27:49.529856, end_date: 2021-08-09T10:27:54.086450, results: {symptoms: **Instance of 'RPStepResult**'}}

Or is this expected not to be recursive?

My workaround for now is to call subsequently jsonEncode-->String and jsonDecode--Map to receive a JSON-structure with basic types.

go previous step missing

Hi,
with ResearchKit on iOS, the user can go to the previous step (with the selected response checked).

QuestionStep with TextAnswerFormat does not work in Form

Tried adding a QuestionStep to a Form, and the QuestionStep has a TextAnswerFormat. It shows the title text correctly in the form, but it will not render the text box or allow text entry. This is true with or without hint text. Furthermore, because it expects the text box to be required, it does not allow the user to proceed past that step.

Tested in ResearchPackage 0.6.5+1 on an AVD, API 30

RPFormStep ignores single RPQuestionStep optional tags

When creating a form step with several questions included, where not all are necessary, the optional parameter is ignored in the single questions. For a example using a RPTextAnswerFormat within a FormStep for additional information, which isn't necessary to be answered and tagged as optional, still is required to be filled out, because the whole form requires it.

Is there any way to get rid of this behavior, or do I really need to put the open text input outside the form ?

100% data driven possible

I had a look at the code and the Data driving the example is currently hardcoded.

I need to load up the Widget and then everything is 100% driven from the JSON loaded from the Server.

Assuming you wanted the survey to be split onto 3 pages, if there a way to tell it that, and it will do the routing ?
At the end of the survey the data can then be sent back to the Server ?

Again sorry about the non specific questions, but i am just trying to validate if i can use this lib for my use case.

Material 3 Support

Hello.

Could we please have Material 3 support? If I use the useMaterial3 flag on ThemeData, visual elements such as buttons aren't rendered properly.

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      theme: ThemeData.light(
          useMaterial3: true,
      ),
      home: const HomePage(),
    );
  }

DateTimeAnswerFormat date boundaries

Small feature request: The CupertinoDatePicker underlying DateTimeAnswerFormat supports "minimum date" and "maximum date" arguments that make it so the selected date must be within certain boundaries (there are also minimum year and maximum year arguments that just do this for year, but these are just simplified versions of the minimum and maximum date arguments that take ints instead of datetime objects). It would be helpful if these could be used as optional arguments in the DateTimeAnswerFormat constructor, as it would save the trouble of validating responses after the fact when the date/time needs to be constrained in some way.

Input Validation

Can you please add support for input validation? Say for example I wish to collect user email addresses, there's currently no way to validate that the entered text is indeed an email address.

Add images to the Answer Formats

I need to make a study where the subject has to answer a question about his opinion on a photograph.
I haven't found any answer that allows me to show a picture below the text and above the answer options.

It is different from the RPImageChoiceAnswerFormat as I do not want to answer with an image, but answer a question about an image.

Localizations improvement

There are two problems in implementation of localization.

Problem 1. Translate function requires from us to know full and strange keys like this:

locale?.translate(
           ’Review this form below, and tap AGREE if you\’re ready to continue.’) ??
         ’Review this form below, and tap AGREE if you\’re ready to continue.’,

Problem 2. Current implementation can’t properly handle cases when we need to insert variable into random place of the string. RP just concatinates sequance of texts and variables but some languages might require to change the order of words. For example:

_errorMessage =
      “${locale?.translate(‘Should be between’) ?? ‘Should be between’} ${widget.answerFormat.minValue} 
${locale?.translate(‘and’) ?? ‘and’} ${widget.answerFormat.maxValue}“;

Working on the private fork of research package repo for company we faced these issues.
There are great solution to solve these problems.
Solution for Problem 1. Use getters in RPLocalization, for example:
String get reviewAndAgreeToContinue => translate(“reviewAndAgreeToContinue”);
Solution for Problem 2. Use functions similarly to getters, like this one:
String valueShouldBeBetween(Object minValue, Object maxValue);

Our main goals are to stay closer to Flutter internationalization and improve your package. If anybody interested in this idea please let me know and I will create PR soon.

Results

Hello, at the end of a questionnaire, how do I go back to the home screen using a pushAndRemoveUntil? because it seems to me that I come back with a pop.

I tried to search but I couldn't find where to make this change.

Grateful for the attention!

flutter upgrade - using older version of the Android embedding

What flutter channel do you use ?

I get the following when running the example.

Running "flutter pub get" in research_package_demo_app...           1.1s
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
Warning
──────────────────────────────────────────────────────────────────────────────
Your Flutter application is created using an older version of the Android
embedding. It's being deprecated in favor of Android embedding v2. Follow the
steps at

https://flutter.dev/go/android-project-migration

to migrate your project.

How to display conditional widget depends on selected answer ?

Hi,

I want to display widget depends on user's answer. For example, question "Do you smoke ?", if user selection is Yes, I want to display one widget, if No, I want to display one widget.

Can you suggest me that can be achievable using this package ? If yes, please suggest me how to do it.

Hiding Keyboard on proceeding and loosing focus

Hi everyone,

technically not an issue. But for usability, it helps to hide the keyboard, when loosing focus.

Here is the code snippet. Also RPUIChoiceQuestionBody requires a change (on selecting non-freetext options).

RPUITask.dart
`
@OverRide
Widget build(BuildContext context) {
RPLocalizations? locale = RPLocalizations.of(context);

return WillPopScope(
  onWillPop: () => blocTask.sendStatus(RPStepStatus.Canceled),
  child: Scaffold(
      backgroundColor: Theme.of(context).backgroundColor,
      resizeToAvoidBottomInset: true,

// *****************************
// (1/2) added GestureDetector to remove keyboard on click
body: new GestureDetector(
onTap: () {
FocusScope.of(context).requestFocus(new FocusNode());
},
child: SafeArea(
// *****************************
child: Column(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [
// top bar
_carouselBar(),
// Body
Expanded(
child: PageView.builder(
itemBuilder: (BuildContext context, int position) {
return _activeSteps[position].stepWidget;
},
itemCount: _activeSteps.length,
controller: _taskPageViewController,
physics: NeverScrollableScrollPhysics(),
),
),
// Bottom navigation
if (![
RPCompletionStep,
RPVisualConsentStep,
RPConsentReviewStep
].contains(_currentStep.runtimeType))
Padding(
padding: EdgeInsets.only(left: 15, right: 15, bottom: 10),
child: Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [
// if first question or its a navigable task
_currentStepIndex == 0 || navigableTask
? Container()
: OutlinedButton(
onPressed: () =>
blocTask.sendStatus(RPStepStatus.Back),
child: Text(
locale?.translate('BACK') ?? 'BACK',
// style: TextStyle(
// color: Theme.of(context).primaryColor),
),
),
StreamBuilder(
stream: blocQuestion.questionReadyToProceed,
builder: (context, snapshot) {
if (snapshot.hasData) {
return ElevatedButton(
child: Text(
RPLocalizations.of(context)
?.translate('NEXT') ??
"NEXT",
style: Theme.of(context)
.accentTextTheme
.button,
),
onPressed: snapshot.data!
? () {
// *****************************
// (2/2) added GestureDetector to remove keyboard on proceed
FocusScope.of(context).unfocus();
// *****************************
blocTask.sendStatus(
RPStepStatus.Finished);
}
: null,
);
} else {
return Container();
}
},
),
],
),
),
],
),
),
)),
);
}`

Provide screenshots

I'm quite interested in this package but see it has a low score due to the fact that it's not popular. Perhaps if you included screenshots in your documentation on pub.dev that would help improve the adoption of the package.

Feel free to close this issue as soon as you read it. :-)

Thx!

Plans for null-safety?

First of all, let me congratulate you on this great package! It is very helpful.
I am slowly migrating towards null-safety in my overall app. Do you have plans to go null-safe? I am specifically currently struggling with the onCancel method and its result parameter. Apart from that I got the linear survey to work well embedded into an otherwise null-safe app.

AnswerFormat for free text?

Is there a way to ask for a short piece of text, such as a comment? I am aware of the choice with free-text, but that only allows a single line and looks strange if this is the only choice. I am looking for an input field for maybe 5 lines of text.

Inconsistent look & feel

There is a number of inconsistencies in the current version of RP in terms of look & feel. Attached are three images - the issues are:

  • why do the intro screen and questions have a blue background?
  • why is the "Done" screen fundamentally different in term of color and image style?

Screenshot_20210416-150459
Screenshot_20210416-150448
Screenshot_20210416-150300

Cognitive Function Tests have 2 different proceed buttons but one is disabled - Confusing for users?

As the title says, I find that the cognitive function tests have a 'READY' button in the centre of the instruction screen as well as a "NEXT" button in the footer. However, the next button is grey and onPressed = null which has confused some of my older participants.

My fix is-- in RPUITask.dart there is a StreamBuilder as part of ' _taskPersistentFooterButtons' which returns the RaisedButton with 'NEXT' as the text widget.

I have wrapped the RaisedButton in an opacity with a turnery expression based on snapshot.data. I've pasted the code below, but please note (1) I am an amateur coder not a CS guy, it is highly unlikely I have improved anyones code... (2) I am ONLY using the cognitive function parts of the package, this may (probably?) break something elsewhere!

Thanks
Nick

ps Thanks for such a great tool!

`
StreamBuilder<bool>(
          stream: blocQuestion.questionReadyToProceed,
          builder: (context, snapshot) {
            if (snapshot.hasData) {
              return Opacity( // <<This is my addition
                  opacity: snapshot.data ? 1:0,
                  child:RaisedButton(
                color: Theme.of(context).accentColor,
                textColor: Colors.white,
                child: Text(
                  RPLocalizations.of(context)?.translate('NEXT') ?? "NEXT",
                ),
                onPressed: snapshot.data
                    ? () {
                        blocTask.sendStatus(StepStatus.Finished);
                      }
                    : null,
              ));
            } else {
              return Container();
            }
          },
        ),`

Example app build issues

after git clone [email protected]:cph-cachet/research.package.git

removed flutter_cupertino_localizations: ^1.0.1 from pubspec.yaml to build.

Prior to remove, encountered these errors:

flutter pub get had these issues:

[example] flutter pub get
Resolving dependencies...
The current Dart SDK version is 3.0.1.

Because research_package_demo_app depends on flutter_cupertino_localizations >=1.0.1 which doesn't support null safety, version solving failed.

The lower bound of "sdk: '>=2.0.0-dev.68.0 <3.0.0'" must be 2.12.0 or higher to enable null safety.
For details, see https://dart.dev/null-safety
exit code 1

flutter doctor -v


[✓] Flutter (Channel stable, 3.10.1, on macOS 13.0.1 22A400 darwin-arm64, locale en-US)
    • Flutter version 3.10.1 on channel stable at /Users/phil/bin/flutter
    • Upstream repository https://github.com/flutter/flutter.git
    • Framework revision d3d8effc68 (5 weeks ago), 2023-05-16 17:59:05 -0700
    • Engine revision b4fb11214d
    • Dart version 3.0.1
    • DevTools version 2.23.1

[✓] Android toolchain - develop for Android devices (Android SDK version 33.0.1)
    • Android SDK at /Users/phil/Library/Android/sdk
    • Platform android-33, build-tools 33.0.1
    • ANDROID_HOME = /Users/phil/Library/Android/sdk
    • Java binary at: /Applications/Android Studio.app/Contents/jre/Contents/Home/bin/java
    • Java version OpenJDK Runtime Environment (build 11.0.13+0-b1751.21-8125866)
    • All Android licenses accepted.

[✓] Xcode - develop for iOS and macOS (Xcode 14.3)
    • Xcode at /Applications/Xcode.app/Contents/Developer
    • Build 14E222b
    • CocoaPods version 1.12.0

[✓] Chrome - develop for the web
    • Chrome at /Applications/Google Chrome.app/Contents/MacOS/Google Chrome

[✓] Android Studio (version 2021.3)
    • Android Studio at /Applications/Android Studio.app/Contents
    • Flutter plugin can be installed from:
      🔨 https://plugins.jetbrains.com/plugin/9212-flutter
    • Dart plugin can be installed from:
      🔨 https://plugins.jetbrains.com/plugin/6351-dart
    • Java version OpenJDK Runtime Environment (build 11.0.13+0-b1751.21-8125866)

[✓] VS Code (version 1.79.0)
    • VS Code at /Applications/Visual Studio Code.app/Contents
    • Flutter extension version 3.66.0

[✓] Connected device (5 available)
    • Pixel 5a (mobile)  • 19211JECB03038                       • android-arm64  • Android 13 (API 33)
    • iPhone12 (mobile)  • 00008101-000E706C3641001E            • ios            • iOS 16.3.1 20D67
    • iPhone 14 (mobile) • 0A042922-6107-47BB-9F56-05D84CBFF2F2 • ios            • com.apple.CoreSimulator.SimRuntime.iOS-16-4 (simulator)
    • macOS (desktop)    • macos                                • darwin-arm64   • macOS 13.0.1 22A400 darwin-arm64
    • Chrome (web)       • chrome                               • web-javascript • Google Chrome 114.0.5735.133
    ! Error: Phil’s Apple Watch has not finished loading development services. Please select a different device, or wait for the device to load
      development services and try again. (code 8)

[✓] Network resources
    • All expected network resources are available.

• No issues found!

New ActivitySteps / Active Tasks

Hi All,

I would be very keen to contribute to RP.

In particular, I am interested in creating new ActivitySteps (Active Tasks on RK). I noticed here that you have already (re)created a few RK active tasks, including Stroop, Trail Making and Reaction Time.

I would like to try to recreate the RK Range of Motion Active Task (and maybe the Walking Tasks) as an implementation of ActivityStep on RP. To help with this, please can you point me in the direction of the code for these implemented ActivitySteps? Unfortunately, I couldn't see them on GitHub.

Thanks!

David Evans

detailText is now shown / available in RPChoice

When adding detailText to an RPChoice like below:

RPChoiceAnswerFormat _symptomsChoices = RPChoiceAnswerFormat(
      answerStyle: RPChoiceAnswerStyle.SingleChoice,
      choices: [
        RPChoice(
            text: "No difficulties with day-to-day activities.",
            detailText:
                "For example: Your Parkinsons disease at present is not affecting "
                "your daily living.",
            value: 1),

     ....

      ]);

This is not shown or available in the form when shown - see below:

2022-10-25 20 57 52

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.