Flutter问卷调查插件carp_survey_package的使用
Flutter问卷调查插件carp_survey_package的使用
CARP Survey Sampling Package
CARP Survey Sampling Package 是一个用于收集用户生成数据的采样包,可以与 CARP Mobile Sensing (CAMS) 框架一起使用。数据通过 调查 和 认知测试 收集。该库使用了 CARP Research Package 和 CARP Cognition Package。
更多关于 Research Package API 的信息,以及如何创建调查和认知测试,请参阅 CARP 网站。有关如何在应用中使用此包和 RPAppTask
的示例,请参阅 PulmonaryMonitor 应用。有关如何使用 AppTask
的更多信息,请参阅 CAMS 维基。
安装
要在项目中使用此包,请在 pubspec.yaml
文件中添加以下依赖项。请注意,此包仅与 carp_mobile_sensing
一起使用。
dependencies:
carp_mobile_sensing: ^latest
carp_survey_package: ^latest
...
使用方法
要使用此包,请将其导入到您的应用中,并与 carp_mobile_sensing 包一起使用:
import 'package:carp_core/carp_core.dart';
import 'package:carp_mobile_sensing/carp_mobile_sensing.dart';
import 'package:carp_survey_package/survey.dart';
在创建和运行研究之前,需要在 SamplingPackageRegistry 中注册此包。
SamplingPackageRegistry().register(SurveySamplingPackage());
一旦完成注册,可以将调查作为 RPAppTask
添加到 CAMS 协议中,如下所示:
// Add a task control to the protocol that triggers every day at 13:00,
// issuing a WHO-5 survey while also collecting device and
// ambient light information when survey is initiated by the user.
protocol.addTaskControl(
RecurrentScheduledTrigger(
type: RecurrentType.daily,
time: TimeOfDay(hour: 13),
),
RPAppTask(
type: SurveyUserTask.SURVEY_TYPE,
name: 'WHO-5 Survey',
rpTask: who5Task,
measures: [
Measure(type: DeviceSamplingPackage.DEVICE_INFORMATION),
Measure(type: SensorSamplingPackage.AMBIENT_LIGHT),
]),
phone);
可以将一组认知测试添加如下:
// Add a Parkinson's assessment consisting of;
// * an instruction step
// * a timer step
// * a Flanker and Tapping activity (from cognition package).
//
// Accelerometer and gyroscope data is collected while the user is performing
// the task in order to assess tremor.
protocol.addTaskControl(
PeriodicTrigger(period: const Duration(hours: 2)),
RPAppTask(
type: SurveyUserTask.COGNITIVE_ASSESSMENT_TYPE,
title: "Parkinson's' Assessment",
description: "A simple task assessing motor and cognitive functioning.",
minutesToComplete: 3,
rpTask: RPOrderedTask(
identifier: "parkinsons_assessment",
steps: [
RPInstructionStep(
identifier: 'parkinsons_instruction',
title: "Parkinsons' Disease Assessment",
text:
"In the following pages, you will be asked to solve two simple test which will help assess "
"your symptoms on a daily basis. Each test has an instruction page, which you should read "
"carefully before starting the test.\n\n"
"Please sit down comfortably and hold the phone in one hand while performing the test "
"with the other."),
RPTimerStep(
identifier: 'timer_1',
timeout: const Duration(seconds: 6),
title:
"Please stand up and hold the phone in one hand and lift it in a straight arm "
"until you hear the sound.",
playSound: true,
),
RPFlankerActivity(
identifier: 'flanker_1',
lengthOfTest: 30,
numberOfCards: 10,
),
RPTappingActivity(
identifier: 'tapping_1',
lengthOfTest: 10,
)
],
),
measures: [
Measure(type: SensorSamplingPackage.ACCELERATION),
Measure(type: SensorSamplingPackage.ROTATION),
]),
phone);
示例代码
以下是一个简单的示例,展示了如何使用 CARP Survey Sampling Package 与 CARP Mobile Sensing (CAMS) 一起工作。请注意,以下代码不会直接运行。有关如何使用 CAMS 的详细文档,请参阅 CAMS 文档。
import 'package:carp_core/carp_core.dart';
import 'package:carp_mobile_sensing/carp_mobile_sensing.dart';
import 'package:carp_survey_package/survey.dart';
import 'package:research_package/research_package.dart';
import 'package:cognition_package/cognition_package.dart';
/// 这是一个非常简单的示例,展示了如何使用 CARP Survey Sampling Package 与 CARP Mobile Sensing (CAMS) 一起工作。
/// 注意,以下代码不会直接运行。
/// 请参阅文档了解如何使用 CAMS: https://github.com/cph-cachet/carp.sensing-flutter/wiki
void main() async {
// 注册此采样包,以便在使用其测量时生效
SamplingPackageRegistry().register(SurveySamplingPackage());
// 创建一个研究协议
StudyProtocol protocol = StudyProtocol(
ownerId: 'owner@dtu.dk',
name: 'Survey Example',
);
// 定义用于数据收集的设备。
// 在这种情况下,仅使用这台智能手机
Smartphone phone = Smartphone();
protocol.addPrimaryDevice(phone);
// 添加一个任务控制,每天 13:00 触发,
// 发起 WHO-5 调查,同时收集设备和环境光信息
protocol.addTaskControl(
RecurrentScheduledTrigger(
type: RecurrentType.daily,
time: TimeOfDay(hour: 13),
),
RPAppTask(
type: SurveyUserTask.SURVEY_TYPE,
name: 'WHO-5 Survey',
rpTask: who5Task,
measures: [
Measure(type: DeviceSamplingPackage.DEVICE_INFORMATION),
Measure(type: SensorSamplingPackage.AMBIENT_LIGHT),
]),
phone);
// 添加一个帕金森评估,包括:
// * 一个指导步骤
// * 一个计时步骤
// * 一个 Flanker 和 Tapping 活动(来自认知包)。
//
// 在用户执行任务时收集加速度计和陀螺仪数据,以评估震颤。
protocol.addTaskControl(
PeriodicTrigger(period: const Duration(hours: 2)),
RPAppTask(
type: SurveyUserTask.COGNITIVE_ASSESSMENT_TYPE,
title: "Parkinson's' Assessment",
description: "A simple task assessing finger tapping speed.",
minutesToComplete: 3,
rpTask: RPOrderedTask(
identifier: "parkinsons_assessment",
steps: [
RPInstructionStep(
identifier: 'parkinsons_instruction',
title: "Parkinsons' Disease Assessment",
text:
"In the following pages, you will be asked to solve two simple test which will help assess your symptoms on a daily basis. "
"Each test has an instruction page, which you should read carefully before starting the test.\n\n"
"Please sit down comfortably and hold the phone in one hand while performing the test with the other."),
RPTimerStep(
identifier: 'RPTimerStepID',
timeout: const Duration(seconds: 6),
title:
"Please stand up and hold the phone in one hand and lift it in a straight arm until you hear the sound.",
playSound: true,
),
RPFlankerActivity(
identifier: 'flanker_1',
lengthOfTest: 30,
numberOfCards: 10,
),
RPTappingActivity(
identifier: 'tapping_1',
lengthOfTest: 10,
)
],
),
measures: [
Measure(type: SensorSamplingPackage.ACCELERATION),
Measure(type: SensorSamplingPackage.ROTATION),
]),
phone);
}
希望这些信息对您有所帮助!如果您有任何问题或需要进一步的帮助,请随时提问。
更多关于Flutter问卷调查插件carp_survey_package的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
更多关于Flutter问卷调查插件carp_survey_package的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
当然,以下是如何在Flutter项目中使用carp_survey_package
插件进行问卷调查的一个示例。carp_survey_package
是CARP(Continuous Active and Passive Health and Well-being Research Platform)项目的一部分,专门用于创建和管理问卷调查。
首先,确保你的Flutter项目已经设置好,并且已经添加了carp_survey_package
依赖。你可以在你的pubspec.yaml
文件中添加以下依赖:
dependencies:
flutter:
sdk: flutter
carp_survey_package: ^最新版本号 # 请替换为最新的版本号
然后运行flutter pub get
来获取依赖。
接下来,我们可以开始使用carp_survey_package
来创建一个简单的问卷调查。以下是一个完整的示例代码,展示了如何创建、配置和显示一个问卷:
import 'package:flutter/material.dart';
import 'package:carp_survey_package/survey.dart';
import 'package:carp_core/carp_core.dart';
void main() {
runApp(MyApp());
}
class MyApp extends StatefulWidget {
@override
_MyAppState createState() => _MyAppState();
}
class _MyAppState extends State<MyApp> {
// 创建一个Survey对象
Survey _survey;
@override
void initState() {
super.initState();
// 配置问卷
_survey = Survey()
..title = '用户满意度调查'
..description = '这是一个简单的用户满意度调查'
..addQuestion(
SingleChoiceQuestion()
..title = '您对我们的服务满意吗?'
..addAnswerOption(AnswerOption('非常满意'))
..addAnswerOption(AnswerOption('满意'))
..addAnswerOption(AnswerOption('一般'))
..addAnswerOption(AnswerOption('不满意'))
..addAnswerOption(AnswerOption('非常不满意')),
)
..addQuestion(
TextQuestion()
..title = '您对我们的服务有什么建议?'
..isRequired = true,
);
}
@override
Widget build(BuildContext context) {
return MaterialApp(
home: Scaffold(
appBar: AppBar(
title: Text('Flutter问卷调查示例'),
),
body: Center(
child: ElevatedButton(
onPressed: () async {
// 显示问卷
final result = await showSurveyDialog(
context: context,
survey: _survey,
// 可以添加更多配置,比如参与者信息等
);
// 处理问卷结果
if (result != null) {
// 这里可以处理用户提交的问卷结果
print('问卷结果: $result');
}
},
child: Text('开始调查'),
),
),
),
);
}
}
// 这是一个自定义的showSurveyDialog函数,用于显示问卷对话框
Future<SurveyResult?> showSurveyDialog({
required BuildContext context,
required Survey survey,
}) async {
return showDialog<SurveyResult?>(
context: context,
builder: (BuildContext context) {
return AlertDialog(
title: Text(survey.title ?? '问卷调查'),
content: SurveyWidget(survey: survey),
actions: <Widget>[
TextButton(
onPressed: () => Navigator.of(context).pop(),
child: Text('取消'),
),
ElevatedButton(
onPressed: () async {
final result = await Navigator.of(context).popContext();
if (result is SurveyResult) {
Navigator.of(context).pop(result);
}
},
child: Text('提交'),
),
],
);
},
);
}
注意:
SurveyWidget
是carp_survey_package
提供的一个用于显示问卷的widget,但在这个示例中,为了简化,我们直接在AlertDialog
中使用了它。在实际应用中,你可能需要更复杂的UI布局和逻辑。showSurveyDialog
函数是一个自定义函数,用于显示问卷对话框。在实际应用中,你可能需要根据你的需求对其进行调整。- 这个示例中,问卷结果是通过打印到控制台来处理的。在实际应用中,你可能需要将结果保存到数据库或发送到服务器。
确保你按照carp_survey_package
的文档和API参考来配置和使用问卷。这个插件提供了很多配置选项和功能,可以满足不同的需求。