import 'package:flutter/material.dart'; import '../services/notification_service.dart'; import '../services/user_service.dart'; import 'home_screen.dart'; class NotificationPermissionScreen extends StatefulWidget { @override _NotificationPermissionScreenState createState() => _NotificationPermissionScreenState(); } class _NotificationPermissionScreenState extends State { bool _isLoading = false; Future _requestNotificationPermission() async { setState(() { _isLoading = true; }); try { final notificationService = NotificationService(); await notificationService.requestPermissionAndSetup(); final fcmToken = await notificationService.getToken(); if (fcmToken != null) { final result = await UserService.updateFCMToken(fcmToken); if (result['success'] == true) { Navigator.of(context).pushReplacement( MaterialPageRoute(builder: (context) => HomeScreen()), ); } else { _showErrorAndContinue( result['message'] ?? 'Failed to update notification settings', ); } } else { _showErrorAndContinue('Failed to get notification token'); } } catch (e) { _showErrorAndContinue('Error setting up notifications: $e'); } setState(() { _isLoading = false; }); } void _showErrorAndContinue(String message) { showDialog( context: context, builder: (context) => AlertDialog( title: Text('Notification Setup'), content: Text( '$message\n\nYou can enable notifications later in settings.', ), actions: [ TextButton( onPressed: () { Navigator.of(context).pop(); Navigator.of(context).pushReplacement( MaterialPageRoute(builder: (context) => HomeScreen()), ); }, child: Text('Continue', style: TextStyle(color: Color(0xFF6A4C93))), ), ], ), ); } void _skipNotifications() { Navigator.of( context, ).pushReplacement(MaterialPageRoute(builder: (context) => HomeScreen())); } @override Widget build(BuildContext context) { return Scaffold( body: Container( decoration: BoxDecoration( gradient: LinearGradient( begin: Alignment.topCenter, end: Alignment.bottomCenter, colors: [Color(0xFF32B0A5), Color(0xFF4600B9)], stops: [0.0, 0.5], ), ), child: SafeArea( child: Padding( padding: EdgeInsets.all(24), child: Column( children: [ Expanded( child: Column( mainAxisAlignment: MainAxisAlignment.center, children: [ Container( width: 200, height: 200, decoration: BoxDecoration( color: Colors.white.withOpacity(0.2), shape: BoxShape.circle, ), child: Icon( Icons.rocket_launch, size: 100, color: Colors.white, ), ), SizedBox(height: 40), Text( 'All Set!', style: TextStyle( fontSize: 32, fontWeight: FontWeight.bold, color: Colors.white, ), ), SizedBox(height: 16), Text( 'But one last thing...', style: TextStyle( fontSize: 18, color: Colors.white.withOpacity(0.9), ), ), SizedBox(height: 40), Container( padding: EdgeInsets.all(24), decoration: BoxDecoration( color: Colors.white.withOpacity(0.1), borderRadius: BorderRadius.circular(16), border: Border.all( color: Colors.white.withOpacity(0.3), ), ), child: Column( children: [ Icon( Icons.notifications_active, size: 40, color: Colors.white, ), SizedBox(height: 16), Text( 'Stay Connected', style: TextStyle( fontSize: 20, fontWeight: FontWeight.w600, color: Colors.white, ), ), SizedBox(height: 8), Text( 'We will only send you updates on your own invitations or posts. You can always change your notification settings later.', textAlign: TextAlign.center, style: TextStyle( fontSize: 16, color: Colors.white.withOpacity(0.8), height: 1.4, ), ), ], ), ), ], ), ), Column( children: [ Container( width: double.infinity, height: 56, child: ElevatedButton( onPressed: _isLoading ? null : _requestNotificationPermission, style: ElevatedButton.styleFrom( backgroundColor: Colors.white, foregroundColor: Color(0xFF6A4C93), shape: RoundedRectangleBorder( borderRadius: BorderRadius.circular(12), ), elevation: 4, ), child: _isLoading ? CircularProgressIndicator( valueColor: AlwaysStoppedAnimation( Color(0xFF6A4C93), ), ) : Row( mainAxisAlignment: MainAxisAlignment.center, children: [ Icon(Icons.notifications, size: 20), SizedBox(width: 8), Text( 'Enable Notifications', style: TextStyle( fontSize: 16, fontWeight: FontWeight.w600, ), ), ], ), ), ), SizedBox(height: 16), TextButton( onPressed: _isLoading ? null : _skipNotifications, child: Text( 'Skip for now', style: TextStyle( color: Colors.white.withOpacity(0.8), fontSize: 16, decoration: TextDecoration.underline, ), ), ), ], ), ], ), ), ), ), ); } }