From 6fc676c5e7d9ab904d3c7474f03464be490dacea Mon Sep 17 00:00:00 2001 From: Gabby Gurdin Date: Thu, 18 Apr 2024 13:33:11 -0400 Subject: [PATCH] fix for error in join space dialog --- .../chat_list/client_chooser_button.dart | 1 - lib/pages/chat_list/space_view.dart | 18 +++-- lib/pages/new_space/new_space.dart | 4 - lib/pangea/controllers/class_controller.dart | 4 - .../extensions/pangea_room_extension.dart | 7 +- lib/pangea/utils/class_code.dart | 79 ++++++------------- 6 files changed, 42 insertions(+), 71 deletions(-) diff --git a/lib/pages/chat_list/client_chooser_button.dart b/lib/pages/chat_list/client_chooser_button.dart index 50fd1fdeb..1af102768 100644 --- a/lib/pages/chat_list/client_chooser_button.dart +++ b/lib/pages/chat_list/client_chooser_button.dart @@ -393,7 +393,6 @@ class ClientChooserButton extends StatelessWidget { ClassCodeUtil.joinWithClassCodeDialog( context, controller.pangeaController, - null, ); break; case SettingsAction.findAConversationPartner: diff --git a/lib/pages/chat_list/space_view.dart b/lib/pages/chat_list/space_view.dart index eba8f7225..70f7ddfed 100644 --- a/lib/pages/chat_list/space_view.dart +++ b/lib/pages/chat_list/space_view.dart @@ -56,8 +56,8 @@ class _SpaceViewState extends State { // #Pangea @override void dispose() { - super.dispose(); _roomSubscription?.cancel(); + super.dispose(); } // Pangea# @@ -108,9 +108,15 @@ class _SpaceViewState extends State { }); rethrow; } finally { - setState(() { - loading = false; - }); + // #Pangea + if (mounted) { + // Pangea# + setState(() { + loading = false; + }); + // #Pangea + } + // Pangea# } } @@ -482,11 +488,11 @@ class _SpaceViewState extends State { onTapSpaceChild, and they interfere with each other */ if (event.isMembershipUpdateByType( Membership.leave, - Matrix.of(context).client.userID!, + client.userID!, ) || event.isMembershipUpdateByType( Membership.invite, - Matrix.of(context).client.userID!, + client.userID!, ) || event.isSpaceChildUpdate(activeSpaceId)) { _refresh(); diff --git a/lib/pages/new_space/new_space.dart b/lib/pages/new_space/new_space.dart index 8d09c65f0..402ea3e5b 100644 --- a/lib/pages/new_space/new_space.dart +++ b/lib/pages/new_space/new_space.dart @@ -233,10 +233,6 @@ class NewSpaceController extends State { GoogleAnalytics.createClass(room.name, room.classCode); try { await room.invite(BotName.byEnvironment); - await room.setPower( - BotName.byEnvironment, - ClassDefaultValues.powerLevelOfAdmin, - ); } catch (err) { ErrorHandler.logError( e: "Failed to invite pangea bot to space ${room.id}", diff --git a/lib/pangea/controllers/class_controller.dart b/lib/pangea/controllers/class_controller.dart index f9c5b2ce1..7b1693ec0 100644 --- a/lib/pangea/controllers/class_controller.dart +++ b/lib/pangea/controllers/class_controller.dart @@ -13,7 +13,6 @@ import 'package:fluffychat/pangea/utils/error_handler.dart'; import 'package:flutter/foundation.dart'; import 'package:flutter/material.dart'; import 'package:flutter_gen/gen_l10n/l10n.dart'; -import 'package:go_router/go_router.dart'; import 'package:matrix/matrix.dart'; import '../../widgets/matrix.dart'; @@ -132,15 +131,12 @@ class ClassController extends BaseController { await _pangeaController.matrixState.client.joinRoom(classChunk.roomId); setActiveSpaceIdInChatListController(classChunk.roomId); - GoogleAnalytics.joinClass(classCode); ClassCodeUtil.messageSnack( context, L10n.of(context)!.welcomeToYourNewClass, ); - - context.go("/rooms"); return; // P-EPIC // prereq - server needs ability to invite to private room. how? diff --git a/lib/pangea/extensions/pangea_room_extension.dart b/lib/pangea/extensions/pangea_room_extension.dart index 4768bd451..193165f63 100644 --- a/lib/pangea/extensions/pangea_room_extension.dart +++ b/lib/pangea/extensions/pangea_room_extension.dart @@ -949,15 +949,18 @@ extension PangeaRoom on Room { return (eventsDefaultPowerLevel ?? 0) >= ClassDefaultValues.powerLevelOfAdmin; } - if (spaceChildren.isEmpty) return false; + int joinedRooms = 0; for (final child in spaceChildren) { if (child.roomId == null) continue; final Room? room = client.getRoomById(child.roomId!); if (room?.locked == false) { return false; } + if (room != null) { + joinedRooms += 1; + } } - return true; + return joinedRooms > 0 ? true : false; } Future suggestedInSpace(Room space) async { diff --git a/lib/pangea/utils/class_code.dart b/lib/pangea/utils/class_code.dart index 6bd9c9764..b4e0671d6 100644 --- a/lib/pangea/utils/class_code.dart +++ b/lib/pangea/utils/class_code.dart @@ -1,12 +1,10 @@ import 'dart:math'; +import 'package:adaptive_dialog/adaptive_dialog.dart'; +import 'package:fluffychat/pangea/utils/error_handler.dart'; import 'package:flutter/material.dart'; - import 'package:flutter_gen/gen_l10n/l10n.dart'; -import 'package:future_loading_dialog/future_loading_dialog.dart'; -import 'package:go_router/go_router.dart'; -import 'package:fluffychat/pangea/utils/error_handler.dart'; import '../controllers/pangea_controller.dart'; class ClassCodeUtil { @@ -23,59 +21,32 @@ class ClassCodeUtil { .join(); } - static void joinWithClassCodeDialog( - BuildContext outerContext, + static Future joinWithClassCodeDialog( + BuildContext context, PangeaController pangeaController, - String? classCode, - ) { - final TextEditingController textFieldController = TextEditingController( - text: classCode, + ) async { + final List? classCode = await showTextInputDialog( + context: context, + title: L10n.of(context)!.joinWithClassCode, + okLabel: L10n.of(context)!.ok, + cancelLabel: L10n.of(context)!.cancel, + textFields: [ + DialogTextField(hintText: L10n.of(context)!.joinWithClassCodeHint), + ], ); + if (classCode == null || classCode.single.isEmpty) return; - showDialog( - context: outerContext, - useRootNavigator: false, - builder: (BuildContext context) => Scaffold( - backgroundColor: Colors.transparent, - body: AlertDialog( - title: Text(L10n.of(context)!.joinWithClassCode), - content: TextField( - controller: textFieldController, - decoration: InputDecoration( - hintText: L10n.of(context)!.joinWithClassCodeHint, - ), - ), - actions: [ - TextButton( - child: Text(L10n.of(context)!.cancel), - onPressed: () => Navigator.of(context).pop(), - ), - TextButton( - child: Text(L10n.of(context)!.ok), - onPressed: () => showFutureLoadingDialog( - context: context, - future: () async { - try { - await pangeaController.classController.joinClasswithCode( - outerContext, - textFieldController.text, - ); - } catch (err) { - messageSnack( - outerContext, - ErrorCopy(outerContext, err).body, - ); - } finally { - context.go("/rooms"); - Navigator.of(context).pop(); - } - }, - ), - ), - ], - ), - ), - ); + try { + await pangeaController.classController.joinClasswithCode( + context, + classCode.first, + ); + } catch (err) { + messageSnack( + context, + ErrorCopy(context, err).body, + ); + } } static messageDialog(