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/local_notifications_extension.dart'; import 'package:fluffychat/widgets/matrix.dart'; class EnableNotifications extends StatefulWidget { const EnableNotifications({super.key}); @override EnableNotificationsController createState() => EnableNotificationsController(); } class EnableNotificationsController 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(() {}); } } Future _requestNotificationPermission() async { await Matrix.of(context).requestNotificationPermission(); if (mounted) { context.go("/registration/course"); } } @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: _requestNotificationPermission, 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"), ), ], ), ], ); } }