createExerciseSet method

List<ExerciseModel> createExerciseSet(
  1. {required List<ExerciseModel> exerciseModelList}
)

同じ運動が連続しないようにランダムに運動を選択し、1セット分の運動リストを作成する

Implementation

List<ExerciseModel> createExerciseSet({
  required List<ExerciseModel> exerciseModelList,
}) {
  final listLength = exerciseModelList.length;

  if (listLength < RehabilitationConst.minExerciseDataCountInSet) {
    throw ServiceException(
      ServiceErrorType.missingExerciseDataError,
      ServiceErrorType.missingExerciseDataError.message,
    );
  }

  final exerciseSet = <ExerciseModel>[];

  // 1セット分の運動を選択するまで繰り返す
  while (exerciseSet.length < RehabilitationConst.exerciseSectionCountInSet) {
    /// ランダムなインデックスを取得
    final randomIndex = Random().nextInt(listLength);

    final exercise = exerciseModelList[randomIndex];

    if (exerciseSet.isEmpty) {
      // 1つ目の運動はそのまま追加
      exerciseSet.add(exercise);
    } else {
      // 配列の最後に追加された運動と同じ運動が選ばれた場合は追加しない
      final lastExercise = exerciseSet.last;

      if (exercise.exerciseId != lastExercise.exerciseId) {
        exerciseSet.add(exercise);
      }
    }
  }

  return exerciseSet;
}