diff --git a/lib/pangea/chat_settings/pages/space_details_content.dart b/lib/pangea/chat_settings/pages/space_details_content.dart index ad8094dda..90b5f9784 100644 --- a/lib/pangea/chat_settings/pages/space_details_content.dart +++ b/lib/pangea/chat_settings/pages/space_details_content.dart @@ -292,6 +292,7 @@ class SpaceDetailsContent extends StatelessWidget { // the key forces a rebuild on this redirect key: ValueKey(controller.widget.activeTab), room: room, + courseId: room.coursePlan?.uuid, ), ); case SpaceSettingsTabs.participants: diff --git a/lib/pangea/course_plans/courses/course_plan_room_extension.dart b/lib/pangea/course_plans/courses/course_plan_room_extension.dart index 817499824..18be857d1 100644 --- a/lib/pangea/course_plans/courses/course_plan_room_extension.dart +++ b/lib/pangea/course_plans/courses/course_plan_room_extension.dart @@ -33,6 +33,8 @@ extension CoursePlanRoomExtension on Room { } Future addCourseToSpace(String courseId) async { + if (coursePlan?.uuid == courseId) return; + final future = waitForRoomInSync(); await client.setRoomStateWithKey( id, PangeaEventTypes.coursePlan, @@ -41,6 +43,9 @@ extension CoursePlanRoomExtension on Room { "uuid": courseId, }, ); + if (coursePlan?.uuid != courseId) { + await future; + } } Future launchActivityRoom( diff --git a/lib/pangea/course_settings/course_settings.dart b/lib/pangea/course_settings/course_settings.dart index e9abf6f84..6a01e98f7 100644 --- a/lib/pangea/course_settings/course_settings.dart +++ b/lib/pangea/course_settings/course_settings.dart @@ -24,9 +24,15 @@ import 'package:fluffychat/pangea/events/constants/pangea_event_types.dart'; class CourseSettings extends StatefulWidget { final Room room; + + /// The course ID to load, from the course plan event in the room. + /// Separate from the room to trigger didUpdateWidget on change + final String? courseId; + const CourseSettings({ super.key, required this.room, + required this.courseId, }); @override @@ -48,13 +54,14 @@ class CourseSettingsState extends State @override void didUpdateWidget(covariant CourseSettings oldWidget) { super.didUpdateWidget(oldWidget); - if (oldWidget.room.id != widget.room.id) { + if (oldWidget.room.id != widget.room.id || + oldWidget.courseId != widget.courseId) { _loadCourseInfo(); } } Future _loadCourseInfo() async { - if (widget.room.coursePlan == null) { + if (widget.courseId == null) { setState(() { course = null; loadingCourse = false; @@ -65,7 +72,7 @@ class CourseSettingsState extends State } setState(() => _loadingActivities = true); - await loadCourse(widget.room.coursePlan!.uuid); + await loadCourse(widget.courseId!); if (course != null) { await loadTopics(); await loadAllActivities();