fix: restrict when analytics practice session loss popup is shown (#5316)

This commit is contained in:
ggurdin 2026-01-21 13:45:36 -05:00 committed by GitHub
parent 7458f8f559
commit 1c6c2ee44a
No known key found for this signature in database
GPG key ID: B5690EEEBB952194

View file

@ -58,7 +58,7 @@ class SessionLoader extends AsyncLoader<AnalyticsPracticeSessionModel> {
}
class AnalyticsPractice extends StatefulWidget {
static bool bypassExitConfirmation = false;
static bool bypassExitConfirmation = true;
final ConstructTypeEnum type;
const AnalyticsPractice({
@ -189,18 +189,18 @@ class AnalyticsPracticeState extends State<AnalyticsPractice>
String choiceTargetId(String choiceId) =>
'${widget.type.name}-choice-card-${choiceId.replaceAll(' ', '_')}';
void _resetActivityState() {
void _clearState() {
activityState.value = const AsyncState.loading();
activityTarget.value = null;
enableChoicesNotifier.value = true;
}
void _resetSessionState() {
progressNotifier.value = 0.0;
_queue.clear();
_choiceTexts.clear();
_choiceEmojis.clear();
activityState.value = const AsyncState.idle();
AnalyticsPractice.bypassExitConfirmation = true;
}
void updateElapsedTime(int seconds) {
@ -227,8 +227,7 @@ class AnalyticsPracticeState extends State<AnalyticsPractice>
Future<void> _onLanguageUpdate() async {
try {
_resetActivityState();
_resetSessionState();
_clearState();
await _analyticsService
.updateDispatcher.constructUpdateStream.stream.first
.timeout(const Duration(seconds: 10));
@ -252,9 +251,7 @@ class AnalyticsPracticeState extends State<AnalyticsPractice>
}
Future<void> reloadSession() async {
_resetActivityState();
_resetSessionState();
_clearState();
_sessionLoader.reset();
await _startSession();
}
@ -294,8 +291,10 @@ class AnalyticsPracticeState extends State<AnalyticsPractice>
final activity = await nextActivityCompleter.completer.future;
activityState.value = AsyncState.loaded(activity);
AnalyticsPractice.bypassExitConfirmation = false;
}
} catch (e) {
AnalyticsPractice.bypassExitConfirmation = true;
activityState.value = AsyncState.error(e);
} finally {
_continuing = false;
@ -319,7 +318,9 @@ class AnalyticsPracticeState extends State<AnalyticsPractice>
if (!mounted) return;
activityState.value = AsyncState.loaded(res);
AnalyticsPractice.bypassExitConfirmation = false;
} catch (e) {
AnalyticsPractice.bypassExitConfirmation = true;
if (!mounted) return;
activityState.value = AsyncState.error(e);
return;