From 2227c9d22d9f25c3de7aa5546649b013bc614f95 Mon Sep 17 00:00:00 2001 From: ggurdin Date: Tue, 25 Jun 2024 14:41:45 -0400 Subject: [PATCH] update activity data when activity event id changes, show last activity if there are no incomplete activities --- .../practice_activity_card.dart | 36 +++++++++---------- .../practice_activity_content.dart | 14 ++++++++ 2 files changed, 30 insertions(+), 20 deletions(-) diff --git a/lib/pangea/widgets/practice_activity/practice_activity_card.dart b/lib/pangea/widgets/practice_activity/practice_activity_card.dart index c5ac1e6d1..ce888f0fb 100644 --- a/lib/pangea/widgets/practice_activity/practice_activity_card.dart +++ b/lib/pangea/widgets/practice_activity/practice_activity_card.dart @@ -1,6 +1,5 @@ import 'dart:developer'; -import 'package:collection/collection.dart'; import 'package:fluffychat/pangea/enum/message_mode_enum.dart'; import 'package:fluffychat/pangea/matrix_event_wrappers/pangea_message_event.dart'; import 'package:fluffychat/pangea/matrix_event_wrappers/practice_activity_event.dart'; @@ -53,17 +52,7 @@ class MessagePracticeActivityCardState extends State { void loadInitialData() { if (langCode == null) return; - debugPrint( - "total events: ${widget.pangeaMessageEvent.practiceActivities(langCode!).length}", - ); - debugPrint( - "incomplete practice events: ${widget.pangeaMessageEvent.practiceActivities(langCode!).where((element) => !element.isComplete).length}", - ); updatePracticeActivity(); - // practiceEvent = widget.pangeaMessageEvent - // .practiceActivities(langCode) - // .firstWhereOrNull((activity) => !activity.isComplete); - if (practiceEvent == null) { debugger(when: kDebugMode); } @@ -71,15 +60,22 @@ class MessagePracticeActivityCardState extends State { void updatePracticeActivity() { if (langCode == null) return; - setState(() { - practiceEvent = widget.pangeaMessageEvent - .practiceActivities(langCode!) - .firstWhereOrNull( - (activity) => - activity.event.eventId != practiceEvent?.event.eventId && - !activity.isComplete, - ); - }); + final List activities = + widget.pangeaMessageEvent.practiceActivities(langCode!); + final List incompleteActivities = + activities.where((element) => !element.isComplete).toList(); + debugPrint("total events: ${activities.length}"); + debugPrint("incomplete practice events: ${incompleteActivities.length}"); + + // if an incomplete activity is found, show that + if (incompleteActivities.isNotEmpty) { + practiceEvent = incompleteActivities.first; + } + // if no incomplete activity is found, show the last activity + else if (activities.isNotEmpty) { + practiceEvent = activities.last; + } + setState(() {}); } void showNextActivity() { diff --git a/lib/pangea/widgets/practice_activity/practice_activity_content.dart b/lib/pangea/widgets/practice_activity/practice_activity_content.dart index 6f77741ed..563904e42 100644 --- a/lib/pangea/widgets/practice_activity/practice_activity_content.dart +++ b/lib/pangea/widgets/practice_activity/practice_activity_content.dart @@ -41,6 +41,19 @@ class MessagePracticeActivityContentState @override void initState() { super.initState(); + initalizeActivity(); + } + + @override + void didUpdateWidget(covariant PracticeActivityContent oldWidget) { + super.didUpdateWidget(oldWidget); + if (oldWidget.practiceEvent.event.eventId != + widget.practiceEvent.event.eventId) { + initalizeActivity(); + } + } + + void initalizeActivity() { final PracticeActivityRecordEvent? recordEvent = widget.practiceEvent.userRecords.firstOrNull; if (recordEvent?.record == null) { @@ -54,6 +67,7 @@ class MessagePracticeActivityContentState recordSubmittedPreviousSession = true; recordSubmittedThisSession = true; } + setState(() {}); } void updateChoice(int index) {