import 'package:flutter/material.dart'; import 'package:jago/screens/login.dart'; import 'package:jago/services/db_helper.dart'; // Import DatabaseHelper class SettingsPage extends StatelessWidget { final DatabaseHelper dbHelper = DatabaseHelper(); @override Widget build(BuildContext context) { return Scaffold( appBar: AppBar( backgroundColor: Color(0xFFA82429), elevation: 0, leading: IconButton( icon: Icon(Icons.arrow_back, color: Colors.white), onPressed: () { Navigator.pop(context); }, ), title: Text( 'Pengaturan', style: TextStyle( color: Colors.white, fontWeight: FontWeight.bold, ), ), ), body: Column( children: [ // Header dengan background curved Container( padding: EdgeInsets.fromLTRB(16, 0, 16, 20), decoration: BoxDecoration( color: Color(0xFFA82429), borderRadius: BorderRadius.only( bottomLeft: Radius.circular(30), bottomRight: Radius.circular(30), ), boxShadow: [ BoxShadow( color: Colors.grey.withOpacity(0.5), spreadRadius: 2, blurRadius: 5, offset: Offset(0, 3), ), ], ), child: Center( child: Column( children: [ SizedBox(height: 10), CircleAvatar( backgroundColor: Colors.white, radius: 40, child: Icon( Icons.settings, size: 40, color: Color(0xFFA82429), ), ), SizedBox(height: 10), Text( "Pengaturan Aplikasi", style: TextStyle( color: Colors.white, fontSize: 18, fontWeight: FontWeight.bold, ), ), SizedBox(height: 5), Text( "Kelola preferensi dan data aplikasi", style: TextStyle( color: Colors.white.withOpacity(0.9), fontSize: 14, ), ), ], ), ), ), // Settings options Expanded( child: ListView( padding: const EdgeInsets.all(16.0), children: [ // Akun Section Padding( padding: const EdgeInsets.only(left: 8, bottom: 8), child: Text( 'AKUN', style: TextStyle( color: Colors.grey[600], fontSize: 12, fontWeight: FontWeight.bold, ), ), ), // Logout Card Card( elevation: 2, shape: RoundedRectangleBorder( borderRadius: BorderRadius.circular(12), ), child: InkWell( borderRadius: BorderRadius.circular(12), onTap: () => _confirmLogout(context), child: Padding( padding: const EdgeInsets.symmetric(horizontal: 16, vertical: 12), child: Row( children: [ Container( padding: EdgeInsets.all(8), decoration: BoxDecoration( color: Color(0xFFA82429).withOpacity(0.1), borderRadius: BorderRadius.circular(8), ), child: Icon( Icons.logout, color: Color(0xFFA82429), size: 24, ), ), SizedBox(width: 16), Expanded( child: Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ Text( 'Logout', style: TextStyle( fontSize: 16, fontWeight: FontWeight.bold, ), ), SizedBox(height: 4), Text( 'Keluar dari aplikasi', style: TextStyle( fontSize: 14, color: Colors.grey[600], ), ), ], ), ), Icon( Icons.arrow_forward_ios, size: 16, color: Colors.grey, ), ], ), ), ), ), SizedBox(height: 24), // Data Section Padding( padding: const EdgeInsets.only(left: 8, bottom: 8), child: Text( 'DATA & PENYIMPANAN', style: TextStyle( color: Colors.grey[600], fontSize: 12, fontWeight: FontWeight.bold, ), ), ), // Reset Data Card Card( elevation: 2, shape: RoundedRectangleBorder( borderRadius: BorderRadius.circular(12), ), child: InkWell( borderRadius: BorderRadius.circular(12), onTap: () => _confirmResetData(context), child: Padding( padding: const EdgeInsets.symmetric(horizontal: 16, vertical: 12), child: Row( children: [ Container( padding: EdgeInsets.all(8), decoration: BoxDecoration( color: Colors.red.withOpacity(0.1), borderRadius: BorderRadius.circular(8), ), child: Icon( Icons.delete_forever, color: Colors.red, size: 24, ), ), SizedBox(width: 16), Expanded( child: Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ Text( 'Reset Data', style: TextStyle( fontSize: 16, fontWeight: FontWeight.bold, ), ), SizedBox(height: 4), Text( 'Hapus semua data aplikasi', style: TextStyle( fontSize: 14, color: Colors.grey[600], ), ), ], ), ), Icon( Icons.arrow_forward_ios, size: 16, color: Colors.grey, ), ], ), ), ), ), // Info Aplikasi SizedBox(height: 24), Padding( padding: const EdgeInsets.only(left: 8, bottom: 8), child: Text( 'TENTANG APLIKASI', style: TextStyle( color: Colors.grey[600], fontSize: 12, fontWeight: FontWeight.bold, ), ), ), Card( elevation: 2, shape: RoundedRectangleBorder( borderRadius: BorderRadius.circular(12), ), child: Padding( padding: const EdgeInsets.all(16.0), child: Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ Row( children: [ Image.asset( 'assets/logo.png', width: 40, height: 40, errorBuilder: (context, error, stackTrace) { return Icon( Icons.eco, color: Color(0xFFA82429), size: 40, ); }, ), SizedBox(width: 12), Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ Text( 'JAGO', style: TextStyle( fontSize: 18, fontWeight: FontWeight.bold, color: Color(0xFFA82429), ), ), Text( 'Versi 1.0.0', style: TextStyle( fontSize: 14, color: Colors.grey[600], ), ), ], ), ], ), SizedBox(height: 16), Text( 'Aplikasi otomasi pada kandang anak ayam.', style: TextStyle( fontSize: 14, ), ), SizedBox(height: 8), Text( '© 2025 JAGO Developer Mohammad Iqbal Abdillah ', style: TextStyle( fontSize: 12, color: Colors.grey[600], ), ), ], ), ), ), ], ), ), ], ), ); } // Method untuk konfirmasi logout void _confirmLogout(BuildContext context) async { bool confirm = await showDialog( context: context, builder: (BuildContext context) { return AlertDialog( shape: RoundedRectangleBorder( borderRadius: BorderRadius.circular(15), ), title: Column( children: [ Icon( Icons.logout, color: Color(0xFFA82429), size: 40, ), SizedBox(height: 10), Text( 'Konfirmasi Logout', style: TextStyle( color: Color(0xFFA82429), fontWeight: FontWeight.bold, ), ), ], ), content: Text('Apakah Anda yakin ingin keluar dari aplikasi?'), actions: [ TextButton( onPressed: () => Navigator.of(context).pop(false), child: Text('Batal'), ), ElevatedButton( onPressed: () => Navigator.of(context).pop(true), child: Text('Ya, Keluar', style: TextStyle(color: Colors.white)), style: ElevatedButton.styleFrom( backgroundColor: Color(0xFFA82429), shape: RoundedRectangleBorder( borderRadius: BorderRadius.circular(8), ), ), ), ], ); }, ) ?? false; if (confirm) { Navigator.pushAndRemoveUntil( context, MaterialPageRoute(builder: (context) => LoginScreen()), (Route route) => false, ); } } // Method untuk konfirmasi reset data void _confirmResetData(BuildContext context) async { bool confirm = await showDialog( context: context, builder: (BuildContext context) { return AlertDialog( shape: RoundedRectangleBorder( borderRadius: BorderRadius.circular(15), ), title: Column( children: [ Icon( Icons.warning_amber_rounded, color: Colors.red, size: 40, ), SizedBox(height: 10), Text( 'Konfirmasi Reset Data', style: TextStyle( color: Colors.red, fontWeight: FontWeight.bold, ), ), ], ), content: Text( 'Semua data aplikasi akan dihapus dan tidak dapat dikembalikan. Apakah Anda yakin ingin melanjutkan?', textAlign: TextAlign.center, ), actions: [ TextButton( onPressed: () => Navigator.of(context).pop(false), child: Text('Batal'), ), ElevatedButton( onPressed: () => Navigator.of(context).pop(true), child: Text('Ya, Reset Data', style: TextStyle(color: Colors.white)), style: ElevatedButton.styleFrom( backgroundColor: Colors.red, shape: RoundedRectangleBorder( borderRadius: BorderRadius.circular(8), ), ), ), ], ); }, ) ?? false; if (confirm) { await dbHelper.resetDatabase(); ScaffoldMessenger.of(context).showSnackBar( SnackBar( content: Text('Data berhasil direset'), backgroundColor: Colors.red, behavior: SnackBarBehavior.floating, action: SnackBarAction( label: 'OK', textColor: Colors.white, onPressed: () {}, ), ), ); } } }