From 218e9ab3fd1311f03e192b8293f7af457c59c8ab Mon Sep 17 00:00:00 2001 From: ggurdin <46800240+ggurdin@users.noreply.github.com> Date: Thu, 18 Sep 2025 12:27:13 -0400 Subject: [PATCH] chore: disable save edits button if no changes in course edit page (#4033) --- .../chat_settings/pages/edit_course.dart | 32 +++++++++++++++++-- .../pages/space_details_content.dart | 4 +-- 2 files changed, 32 insertions(+), 4 deletions(-) diff --git a/lib/pangea/chat_settings/pages/edit_course.dart b/lib/pangea/chat_settings/pages/edit_course.dart index ce2701c93..6da7cad93 100644 --- a/lib/pangea/chat_settings/pages/edit_course.dart +++ b/lib/pangea/chat_settings/pages/edit_course.dart @@ -33,6 +33,14 @@ class EditCourseController extends State { _titleController.text = _room!.name; _descController.text = _room!.topic; } + + _titleController.addListener(() { + setState(() {}); + }); + + _descController.addListener(() { + setState(() {}); + }); } @override @@ -44,8 +52,18 @@ class EditCourseController extends State { Room? get _room => Matrix.of(context).client.getRoomById(widget.roomId); + bool get hasChanges { + if (_room == null) return false; + final title = _titleController.text.trim(); + final desc = _descController.text.trim(); + if (title.isNotEmpty && title != _room!.name) return true; + if (desc.isNotEmpty && desc != _room!.topic) return true; + if (_avatar != null) return true; + return false; + } + Future _saveChanges() async { - if (_room == null) return; + if (_room == null || !hasChanges) return; final title = _titleController.text.trim(); final desc = _descController.text.trim(); @@ -58,6 +76,16 @@ class EditCourseController extends State { if (_avatar != null) { await _room!.setAvatar(_avatar!); } + + _room!.client.onRoomState.stream.first.then((_) { + if (mounted) { + setState(() { + _titleController.text = _room!.name; + _descController.text = _room!.topic; + _avatar = null; + }); + } + }); } Future _save() async { @@ -240,7 +268,7 @@ class EditCourseController extends State { Container( padding: const EdgeInsets.symmetric(vertical: 16.0), child: ElevatedButton( - onPressed: _save, + onPressed: hasChanges ? _save : null, child: Row( spacing: 8.0, mainAxisAlignment: MainAxisAlignment.center, diff --git a/lib/pangea/chat_settings/pages/space_details_content.dart b/lib/pangea/chat_settings/pages/space_details_content.dart index 0518da4d4..6ca1d7d2a 100644 --- a/lib/pangea/chat_settings/pages/space_details_content.dart +++ b/lib/pangea/chat_settings/pages/space_details_content.dart @@ -314,9 +314,9 @@ class SpaceDetailsContent extends StatelessWidget { return SingleChildScrollView( child: Column( children: [ - if (courseController.course != null) ...[ + if (room.topic.isNotEmpty) ...[ Text( - courseController.course!.description, + room.topic, style: TextStyle( fontSize: isColumnMode ? 16.0 : 12.0, ),