import 'package:flutter/material.dart'; import '../constants.dart'; import '../services/share_service.dart'; import '../tools/app_ads_managers.dart'; import 'city_management_screen.dart'; import 'about_screen.dart'; import 'feedback_screen.dart'; class SettingsScreen extends StatefulWidget { const SettingsScreen({super.key}); @override State createState() => _SettingsScreenState(); } class _SettingsScreenState extends State { bool _notificationsEnabled = true; @override Widget build(BuildContext context) { return Scaffold( body: Container( decoration: BoxDecoration( gradient: LinearGradient( begin: Alignment.topLeft, end: Alignment.bottomRight, colors: [ kDarkPurple, kDarkPurple.withOpacity(0.95), Colors.black.withOpacity(0.9), ], stops: const [0.0, 0.5, 1.0], ), ), child: CustomScrollView( slivers: [ SliverAppBar( expandedHeight: 120.0, floating: false, pinned: true, elevation: 0, backgroundColor: Colors.transparent, flexibleSpace: FlexibleSpaceBar( title: const Text( 'Settings', style: TextStyle( fontWeight: FontWeight.bold, fontSize: 28, letterSpacing: 0.5, ), ), centerTitle: true, titlePadding: const EdgeInsets.only(bottom: 16.0), ), ), SliverPadding( padding: const EdgeInsets.fromLTRB(16.0, 8.0, 16.0, 24.0), sliver: SliverList( delegate: SliverChildListDelegate([ _SettingsSection( title: 'General', icon: Icons.settings_outlined, children: [ _StyledSwitchListTile( title: 'Enable Notifications', subtitle: 'Receive weather alerts', value: _notificationsEnabled, onChanged: (bool value) { setState(() { _notificationsEnabled = value; }); }, icon: Icons.notifications_outlined, iconColor: Colors.orangeAccent, ), _StyledListTile( title: 'Manage Locations', subtitle: 'Add or remove cities', icon: Icons.location_city_outlined, iconColor: Colors.blueAccent, onTap: () async { InterstitialAdManager.instance.showAd(InterstitialAdType.third,onAdCompleted: (){ }); Navigator.push( context, MaterialPageRoute( builder: (context) => const CityManagementScreen(), ), ); }, ), ], ), const SizedBox(height: 24), _SettingsSection( title: 'Share & Support', icon: Icons.favorite_outline, children: [ _StyledListTile( title: 'Share App', subtitle: 'Share AtmoSphere with friends', icon: Icons.share_outlined, iconColor: Colors.greenAccent, onTap: () async { final shareService = ShareService(); await shareService.shareApp(); }, ), _StyledListTile( title: 'Feedback', subtitle: 'Send us your feedback', icon: Icons.feedback_outlined, iconColor: Colors.purpleAccent, onTap: () { Navigator.push( context, MaterialPageRoute( builder: (context) => const FeedbackScreen(), ), ); }, ), ], ), const SizedBox(height: 24), _SettingsSection( title: 'About', icon: Icons.info_outline, children: [ _StyledListTile( title: 'About AtmoSphere', subtitle: 'Version 1.1.0', icon: Icons.info_outlined, iconColor: Colors.cyanAccent, onTap: () { Navigator.push( context, MaterialPageRoute( builder: (context) => const AboutScreen(), ), ); }, ), ], ), ]), ), ), ], ), ), ); } } class _StyledListTile extends StatelessWidget { final String title; final String subtitle; final IconData icon; final Color? iconColor; final VoidCallback onTap; const _StyledListTile({ required this.title, required this.subtitle, required this.icon, this.iconColor, required this.onTap, }); @override Widget build(BuildContext context) { return Container( margin: const EdgeInsets.symmetric(horizontal: 8.0, vertical: 4.0), decoration: BoxDecoration( borderRadius: BorderRadius.circular(16.0), color: Colors.white.withOpacity(0.05), ), child: Material( color: Colors.transparent, child: InkWell( borderRadius: BorderRadius.circular(16.0), onTap: onTap, child: Padding( padding: const EdgeInsets.symmetric( horizontal: 16.0, vertical: 12.0, ), child: Row( children: [ Container( padding: const EdgeInsets.all(10.0), decoration: BoxDecoration( color: (iconColor ?? Colors.blueAccent).withOpacity(0.2), borderRadius: BorderRadius.circular(12.0), ), child: Icon( icon, color: iconColor ?? Colors.blueAccent, size: 22, ), ), const SizedBox(width: 16.0), Expanded( child: Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ Text( title, style: const TextStyle( fontSize: 16, fontWeight: FontWeight.w600, color: Colors.white, letterSpacing: 0.2, ), ), const SizedBox(height: 4.0), Text( subtitle, style: TextStyle( fontSize: 13, color: Colors.white.withOpacity(0.6), letterSpacing: 0.1, ), ), ], ), ), Icon( Icons.chevron_right_rounded, color: Colors.white.withOpacity(0.4), size: 24, ), ], ), ), ), ), ); } } class _StyledSwitchListTile extends StatelessWidget { final String title; final String subtitle; final bool value; final ValueChanged onChanged; final IconData icon; final Color? iconColor; const _StyledSwitchListTile({ required this.title, required this.subtitle, required this.value, required this.onChanged, required this.icon, this.iconColor, }); @override Widget build(BuildContext context) { return Container( margin: const EdgeInsets.symmetric(horizontal: 8.0, vertical: 4.0), decoration: BoxDecoration( borderRadius: BorderRadius.circular(16.0), color: Colors.white.withOpacity(0.05), ), child: Material( color: Colors.transparent, child: Padding( padding: const EdgeInsets.symmetric(horizontal: 16.0, vertical: 12.0), child: Row( children: [ Container( padding: const EdgeInsets.all(10.0), decoration: BoxDecoration( color: (iconColor ?? Colors.orangeAccent).withOpacity(0.2), borderRadius: BorderRadius.circular(12.0), ), child: Icon( icon, color: iconColor ?? Colors.orangeAccent, size: 22, ), ), const SizedBox(width: 16.0), Expanded( child: Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ Text( title, style: const TextStyle( fontSize: 16, fontWeight: FontWeight.w600, color: Colors.white, letterSpacing: 0.2, ), ), const SizedBox(height: 4.0), Text( subtitle, style: TextStyle( fontSize: 13, color: Colors.white.withOpacity(0.6), letterSpacing: 0.1, ), ), ], ), ), Transform.scale( scale: 0.9, child: Switch( value: value, onChanged: onChanged, activeColor: Colors.blueAccent, activeTrackColor: Colors.blueAccent.withOpacity(0.5), inactiveThumbColor: Colors.grey[600], inactiveTrackColor: Colors.grey[800]!.withOpacity(0.3), ), ), ], ), ), ), ); } } class _SettingsSection extends StatelessWidget { final String title; final IconData? icon; final List children; const _SettingsSection({ required this.title, this.icon, required this.children, }); @override Widget build(BuildContext context) { return Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ Padding( padding: const EdgeInsets.only(left: 8.0, bottom: 12.0), child: Row( children: [ if (icon != null) ...[ Icon(icon, size: 18, color: Colors.white.withOpacity(0.7)), const SizedBox(width: 8.0), ], Text( title.toUpperCase(), style: TextStyle( color: Colors.white.withOpacity(0.7), fontWeight: FontWeight.w700, fontSize: 13, letterSpacing: 1.2, ), ), ], ), ), Container( decoration: BoxDecoration( color: kCardBackground, borderRadius: kCardBorderRadius, boxShadow: [ BoxShadow( color: Colors.black.withOpacity(0.3), blurRadius: 10, offset: const Offset(0, 4), ), ], ), child: Column(children: children), ), ], ); } }