From cf2148d9b681ae2239def652f41255ad82cada94 Mon Sep 17 00:00:00 2001 From: ggurdin <46800240+ggurdin@users.noreply.github.com> Date: Fri, 30 Jan 2026 13:29:26 -0500 Subject: [PATCH] feat: make deeplinks work for public course preview page (#5540) --- android/app/src/main/AndroidManifest.xml | 2 +- ios/Runner/Info.plist | 2 +- lib/pages/chat_list/chat_list.dart | 7 ------- lib/pangea/join_codes/space_code_controller.dart | 13 ------------- lib/widgets/matrix.dart | 11 ++++++++--- 5 files changed, 10 insertions(+), 25 deletions(-) diff --git a/android/app/src/main/AndroidManifest.xml b/android/app/src/main/AndroidManifest.xml index 1b2e5b616..12d15f6a7 100644 --- a/android/app/src/main/AndroidManifest.xml +++ b/android/app/src/main/AndroidManifest.xml @@ -134,7 +134,7 @@ + android:value="false" /> io.flutter.embedded_views_preview FlutterDeepLinkingEnabled - + diff --git a/lib/pages/chat_list/chat_list.dart b/lib/pages/chat_list/chat_list.dart index 42617c405..bd2d0c0a2 100644 --- a/lib/pages/chat_list/chat_list.dart +++ b/lib/pages/chat_list/chat_list.dart @@ -696,7 +696,6 @@ class ChatListController extends State _roomCapacitySubscription?.cancel(); MatrixState.pangeaController.subscriptionController.subscriptionNotifier .removeListener(_onSubscribe); - SpaceCodeController.codeNotifier.removeListener(_onCacheSpaceCode); //Pangea# scrollController.removeListener(_onScroll); super.dispose(); @@ -1108,14 +1107,8 @@ class ChatListController extends State MatrixState.pangeaController.initControllers(); if (mounted) { SpaceCodeController.joinCachedSpaceCode(context); - SpaceCodeController.codeNotifier.addListener(_onCacheSpaceCode); } } - - void _onCacheSpaceCode() { - if (!mounted) return; - SpaceCodeController.joinCachedSpaceCode(context); - } // Pangea# void setActiveFilter(ActiveFilter filter) { diff --git a/lib/pangea/join_codes/space_code_controller.dart b/lib/pangea/join_codes/space_code_controller.dart index 1606f2792..e1590a130 100644 --- a/lib/pangea/join_codes/space_code_controller.dart +++ b/lib/pangea/join_codes/space_code_controller.dart @@ -13,7 +13,6 @@ import 'package:fluffychat/l10n/l10n.dart'; import 'package:fluffychat/pangea/join_codes/knock_space_extension.dart'; import 'package:fluffychat/pangea/join_codes/space_code_repo.dart'; import 'package:fluffychat/pangea/join_codes/too_many_requests_dialog.dart'; -import 'package:fluffychat/pangea/spaces/space_constants.dart'; import 'package:fluffychat/widgets/future_loading_dialog.dart'; import 'package:fluffychat/widgets/matrix.dart'; import '../common/controllers/base_controller.dart'; @@ -21,18 +20,6 @@ import '../common/controllers/base_controller.dart'; class NotFoundException implements Exception {} class SpaceCodeController extends BaseController { - static ValueNotifier codeNotifier = ValueNotifier(null); - - static Future onOpenAppViaUrl(Uri url) async { - if (url.fragment.isEmpty) return; - final fragment = Uri.parse(url.fragment); - final code = fragment.queryParameters[SpaceConstants.classCode]; - if (code != null && fragment.path.contains('join_with_link')) { - await SpaceCodeRepo.setSpaceCode(code); - codeNotifier.value = code; - } - } - static Future joinCachedSpaceCode(BuildContext context) async { final String? spaceCode = SpaceCodeRepo.spaceCode; if (spaceCode == null) return null; diff --git a/lib/widgets/matrix.dart b/lib/widgets/matrix.dart index 78544c300..2f28d54f5 100644 --- a/lib/widgets/matrix.dart +++ b/lib/widgets/matrix.dart @@ -24,7 +24,6 @@ import 'package:fluffychat/pangea/analytics_data/analytics_data_service.dart'; import 'package:fluffychat/pangea/common/controllers/pangea_controller.dart'; import 'package:fluffychat/pangea/common/utils/any_state_holder.dart'; import 'package:fluffychat/pangea/common/utils/error_handler.dart'; -import 'package:fluffychat/pangea/join_codes/space_code_controller.dart'; import 'package:fluffychat/pangea/languages/locale_provider.dart'; import 'package:fluffychat/pangea/user/style_settings_repo.dart'; import 'package:fluffychat/utils/client_manager.dart'; @@ -680,8 +679,14 @@ class MatrixState extends State with WidgetsBindingObserver { // #Pangea Future _processIncomingUris(Uri? uri) async { - if (uri == null) return; - await SpaceCodeController.onOpenAppViaUrl(uri); + if (uri == null || uri.fragment.isEmpty) return; + + final path = + uri.fragment.startsWith('/') ? uri.fragment : '/${uri.fragment}'; + + WidgetsBinding.instance.addPostFrameCallback((_) { + FluffyChatApp.router.go(path); + }); } // Pangea# }