|
|
|
@ -23,6 +23,10 @@ class DeckConfig {
|
|
|
|
/// When true, answer options appear in random order each attempt.
|
|
|
|
/// When true, answer options appear in random order each attempt.
|
|
|
|
final bool shuffleAnswerOrder;
|
|
|
|
final bool shuffleAnswerOrder;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/// Whether to exclude flagged questions from attempts and statistics.
|
|
|
|
|
|
|
|
/// When true, flagged questions are not selected for attempts and do not count in progress/known.
|
|
|
|
|
|
|
|
final bool excludeFlaggedQuestions;
|
|
|
|
|
|
|
|
|
|
|
|
/// Optional time limit for attempts in seconds.
|
|
|
|
/// Optional time limit for attempts in seconds.
|
|
|
|
/// If null, no time limit is enforced.
|
|
|
|
/// If null, no time limit is enforced.
|
|
|
|
final int? timeLimitSeconds;
|
|
|
|
final int? timeLimitSeconds;
|
|
|
|
@ -35,6 +39,7 @@ class DeckConfig {
|
|
|
|
this.immediateFeedbackEnabled = true,
|
|
|
|
this.immediateFeedbackEnabled = true,
|
|
|
|
this.includeKnownInAttempts = false,
|
|
|
|
this.includeKnownInAttempts = false,
|
|
|
|
this.shuffleAnswerOrder = true,
|
|
|
|
this.shuffleAnswerOrder = true,
|
|
|
|
|
|
|
|
this.excludeFlaggedQuestions = false,
|
|
|
|
this.timeLimitSeconds,
|
|
|
|
this.timeLimitSeconds,
|
|
|
|
});
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
|
|
@ -47,6 +52,7 @@ class DeckConfig {
|
|
|
|
bool? immediateFeedbackEnabled,
|
|
|
|
bool? immediateFeedbackEnabled,
|
|
|
|
bool? includeKnownInAttempts,
|
|
|
|
bool? includeKnownInAttempts,
|
|
|
|
bool? shuffleAnswerOrder,
|
|
|
|
bool? shuffleAnswerOrder,
|
|
|
|
|
|
|
|
bool? excludeFlaggedQuestions,
|
|
|
|
int? timeLimitSeconds,
|
|
|
|
int? timeLimitSeconds,
|
|
|
|
}) {
|
|
|
|
}) {
|
|
|
|
return DeckConfig(
|
|
|
|
return DeckConfig(
|
|
|
|
@ -62,6 +68,8 @@ class DeckConfig {
|
|
|
|
includeKnownInAttempts:
|
|
|
|
includeKnownInAttempts:
|
|
|
|
includeKnownInAttempts ?? this.includeKnownInAttempts,
|
|
|
|
includeKnownInAttempts ?? this.includeKnownInAttempts,
|
|
|
|
shuffleAnswerOrder: shuffleAnswerOrder ?? this.shuffleAnswerOrder,
|
|
|
|
shuffleAnswerOrder: shuffleAnswerOrder ?? this.shuffleAnswerOrder,
|
|
|
|
|
|
|
|
excludeFlaggedQuestions:
|
|
|
|
|
|
|
|
excludeFlaggedQuestions ?? this.excludeFlaggedQuestions,
|
|
|
|
timeLimitSeconds: timeLimitSeconds ?? this.timeLimitSeconds,
|
|
|
|
timeLimitSeconds: timeLimitSeconds ?? this.timeLimitSeconds,
|
|
|
|
);
|
|
|
|
);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
@ -78,6 +86,7 @@ class DeckConfig {
|
|
|
|
immediateFeedbackEnabled == other.immediateFeedbackEnabled &&
|
|
|
|
immediateFeedbackEnabled == other.immediateFeedbackEnabled &&
|
|
|
|
includeKnownInAttempts == other.includeKnownInAttempts &&
|
|
|
|
includeKnownInAttempts == other.includeKnownInAttempts &&
|
|
|
|
shuffleAnswerOrder == other.shuffleAnswerOrder &&
|
|
|
|
shuffleAnswerOrder == other.shuffleAnswerOrder &&
|
|
|
|
|
|
|
|
excludeFlaggedQuestions == other.excludeFlaggedQuestions &&
|
|
|
|
timeLimitSeconds == other.timeLimitSeconds;
|
|
|
|
timeLimitSeconds == other.timeLimitSeconds;
|
|
|
|
|
|
|
|
|
|
|
|
@override
|
|
|
|
@override
|
|
|
|
@ -89,6 +98,7 @@ class DeckConfig {
|
|
|
|
immediateFeedbackEnabled.hashCode ^
|
|
|
|
immediateFeedbackEnabled.hashCode ^
|
|
|
|
includeKnownInAttempts.hashCode ^
|
|
|
|
includeKnownInAttempts.hashCode ^
|
|
|
|
shuffleAnswerOrder.hashCode ^
|
|
|
|
shuffleAnswerOrder.hashCode ^
|
|
|
|
|
|
|
|
excludeFlaggedQuestions.hashCode ^
|
|
|
|
(timeLimitSeconds?.hashCode ?? 0);
|
|
|
|
(timeLimitSeconds?.hashCode ?? 0);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|