addStudyFromProtocol method

Future<SmartphoneStudy> addStudyFromProtocol(
  1. StudyProtocol protocol, [
  2. String? studyDeploymentId
])

Create and add a study based on the protocol which needs to be executed on this client.

This is similar to the addStudy method, but the study is created from the protocol. If studyDeploymentId is specifies this id is used as the study deployment id. If not specified, an UUID v1 id is generated.

Returns the newly added study.

Implementation

Future<SmartphoneStudy> addStudyFromProtocol(
  StudyProtocol protocol, [
  String? studyDeploymentId,
]) async {
  assert(deploymentService != null,
      'Deployment Service has not been configured. Call configure() first.');

  final status = await deploymentService!.createStudyDeployment(
    protocol,
    [],
    studyDeploymentId,
  );

  // no participant is specified in a protocol so look up the local user id
  var userId = await Settings().userId;

  final study = SmartphoneStudy(
    studyDeploymentId: status.studyDeploymentId,
    deviceRoleName: status.primaryDeviceStatus!.device.roleName,
    // we expect that this is a "local" protocol where we use the user id as
    // participant id and with just one participant
    participantId: userId,
    participantRoleName: protocol.participantRoles == null ||
            protocol.participantRoles!.isEmpty
        ? 'Participant'
        : protocol.participantRoles?.first.role,
  );
  return await addStudy(study);
}