From fb3365c62dd0748bc1c7ed42ce1d2c8947e6f2e9 Mon Sep 17 00:00:00 2001 From: ggurdin Date: Fri, 30 Jan 2026 15:54:23 -0500 Subject: [PATCH] initial work to add enable notifications to onboarding --- lib/config/routes.dart | 9 ++ lib/pages/onboarding/enable_notificatons.dart | 117 ++++++++++++++++++ lib/pangea/common/utils/p_vguard.dart | 2 +- .../pages/create_pangea_account_page.dart | 4 +- 4 files changed, 129 insertions(+), 3 deletions(-) create mode 100644 lib/pages/onboarding/enable_notificatons.dart diff --git a/lib/config/routes.dart b/lib/config/routes.dart index 350610368..5101c6469 100644 --- a/lib/config/routes.dart +++ b/lib/config/routes.dart @@ -21,6 +21,7 @@ import 'package:fluffychat/pages/device_settings/device_settings.dart'; import 'package:fluffychat/pages/login/login.dart'; import 'package:fluffychat/pages/new_group/new_group.dart'; import 'package:fluffychat/pages/new_private_chat/new_private_chat.dart'; +import 'package:fluffychat/pages/onboarding/enable_notificatons.dart'; import 'package:fluffychat/pages/onboarding/space_code_onboarding.dart'; import 'package:fluffychat/pages/settings/settings.dart'; import 'package:fluffychat/pages/settings_3pid/settings_3pid.dart'; @@ -208,6 +209,14 @@ abstract class AppRoutes { const CreatePangeaAccountPage(), ), ), + GoRoute( + path: 'notifications', + pageBuilder: (context, state) => defaultPageBuilder( + context, + state, + const EnableNotifications(), + ), + ), GoRoute( path: 'course', pageBuilder: (context, state) => defaultPageBuilder( diff --git a/lib/pages/onboarding/enable_notificatons.dart b/lib/pages/onboarding/enable_notificatons.dart new file mode 100644 index 000000000..dbd4f87ef --- /dev/null +++ b/lib/pages/onboarding/enable_notificatons.dart @@ -0,0 +1,117 @@ +import 'package:flutter/material.dart'; + +import 'package:go_router/go_router.dart'; +import 'package:matrix/matrix.dart'; + +import 'package:fluffychat/l10n/l10n.dart'; +import 'package:fluffychat/pangea/authentication/p_logout.dart'; +import 'package:fluffychat/pangea/common/utils/error_handler.dart'; +import 'package:fluffychat/pangea/login/pages/pangea_login_scaffold.dart'; +import 'package:fluffychat/widgets/matrix.dart'; + +class EnableNotifications extends StatefulWidget { + const EnableNotifications({super.key}); + + @override + EnabledNotificationsController createState() => + EnabledNotificationsController(); +} + +class EnabledNotificationsController extends State { + Profile? profile; + + @override + void initState() { + _setProfile(); + super.initState(); + } + + Future _setProfile() async { + final client = Matrix.of(context).client; + try { + profile = await client.getProfileFromUserId( + client.userID!, + ); + } catch (e, s) { + ErrorHandler.logError( + e: e, + s: s, + data: { + 'userId': client.userID, + }, + ); + } finally { + if (mounted) setState(() {}); + } + } + + @override + Widget build(BuildContext context) { + return PangeaLoginScaffold( + customAppBar: AppBar( + title: ConstrainedBox( + constraints: const BoxConstraints( + maxWidth: 450, + ), + child: Row( + mainAxisAlignment: MainAxisAlignment.spaceBetween, + children: [ + BackButton( + onPressed: () => pLogoutAction( + context, + bypassWarning: true, + ), + ), + const SizedBox( + width: 40.0, + ), + ], + ), + ), + automaticallyImplyLeading: false, + ), + showAppName: false, + mainAssetUrl: profile?.avatarUrl, + children: [ + Column( + spacing: 8.0, + children: [ + Text( + L10n.of(context).welcomeUser( + profile?.displayName ?? + Matrix.of(context).client.userID?.localpart ?? + "", + ), + style: Theme.of(context) + .textTheme + .titleLarge + ?.copyWith(fontWeight: FontWeight.bold), + ), + Text( + L10n.of(context).enableNotificationsTitle, + textAlign: TextAlign.center, + ), + ElevatedButton( + onPressed: null, + style: ElevatedButton.styleFrom( + backgroundColor: Theme.of(context).colorScheme.primaryContainer, + foregroundColor: + Theme.of(context).colorScheme.onPrimaryContainer, + ), + child: Row( + mainAxisAlignment: MainAxisAlignment.center, + children: [ + Text(L10n.of(context).enableNotificationsDesc), + ], + ), + ), + TextButton( + child: Text(L10n.of(context).skipForNow), + onPressed: () => context.go("/registration/course"), + ), + ], + ), + ], + ); + } +} diff --git a/lib/pangea/common/utils/p_vguard.dart b/lib/pangea/common/utils/p_vguard.dart index c977618c1..c5ed93703 100644 --- a/lib/pangea/common/utils/p_vguard.dart +++ b/lib/pangea/common/utils/p_vguard.dart @@ -48,7 +48,7 @@ class PAuthGaurd { // If user hasn't set their L2, // and their URL doesn’t include ‘course,’ redirect final bool hasSetL2 = await pController!.userController.isUserL2Set; - return !hasSetL2 ? '/registration/create' : null; + return !hasSetL2 ? '/registration' : null; } /// Redirect for onboarding routes diff --git a/lib/pangea/login/pages/create_pangea_account_page.dart b/lib/pangea/login/pages/create_pangea_account_page.dart index 6565912ef..69347f823 100644 --- a/lib/pangea/login/pages/create_pangea_account_page.dart +++ b/lib/pangea/login/pages/create_pangea_account_page.dart @@ -154,7 +154,7 @@ class CreatePangeaAccountPageState extends State { if (l2Set) { if (targetLangCode == null) { - context.go('/registration/course'); + context.go('/registration/notifications'); return; } @@ -216,7 +216,7 @@ class CreatePangeaAccountPageState extends State { context.go( _spaceId != null ? '/rooms/spaces/$_spaceId/details' - : '/registration/course', + : '/registration/notifications', ); }