TKK_E32231115MAULANA/lib/features/account/presentation/pages/account_page.dart

183 lines
6.0 KiB
Dart

import 'package:flutter/material.dart';
import 'package:monitoring_jamur/core/theme/app_theme.dart';
import 'package:monitoring_jamur/core/session/user_session.dart';
import 'package:monitoring_jamur/features/auth/presentation/pages/login_page.dart';
class AccountPage extends StatelessWidget {
const AccountPage({super.key});
@override
Widget build(BuildContext context) {
return Scaffold(
backgroundColor: AppTheme.backgroundBeige,
body: SafeArea(
child: SingleChildScrollView(
padding: const EdgeInsets.all(24.0),
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
const Text(
'Manajemen Akun',
style: TextStyle(
fontSize: 24,
fontWeight: FontWeight.bold,
color: AppTheme.textDark,
),
),
const SizedBox(height: 32),
// Main Consolidated Frame
Container(
width: double.infinity,
padding: const EdgeInsets.all(24.0),
decoration: BoxDecoration(
color: AppTheme.surfaceWhite,
borderRadius: BorderRadius.circular(32),
boxShadow: [
BoxShadow(
color: Colors.black.withAlpha(10),
blurRadius: 20,
offset: const Offset(0, 10),
),
],
),
child: Column(
children: [
// Cool User Icon
_buildCoolUserIcon(),
const SizedBox(height: 24),
// Username Info
Text(
UserSession.username ?? 'Guest',
style: const TextStyle(
fontSize: 22,
fontWeight: FontWeight.bold,
color: AppTheme.textDark,
),
),
const Text(
'Account Owner',
style: TextStyle(
fontSize: 14,
color: AppTheme.textLight,
),
),
const SizedBox(height: 24),
const Divider(height: 32, thickness: 1.0, color: AppTheme.backgroundBeige),
const SizedBox(height: 8),
// Menu Items
_buildMenuTile(
icon: Icons.settings_rounded,
title: 'Kelola Akun',
onTap: () {
ScaffoldMessenger.of(context).showSnackBar(
const SnackBar(content: Text('Fitur Kelola Akun segera hadir')),
);
},
),
const SizedBox(height: 12),
_buildMenuTile(
icon: Icons.logout_rounded,
title: 'Log out',
isDestructive: true,
onTap: () async {
await UserSession.logout();
if (context.mounted) {
Navigator.pushAndRemoveUntil(
context,
MaterialPageRoute(builder: (context) => const LoginPage()),
(route) => false,
);
}
},
),
],
),
),
],
),
),
),
);
}
Widget _buildCoolUserIcon() {
return Container(
width: 110,
height: 110,
decoration: BoxDecoration(
shape: BoxShape.circle,
gradient: const LinearGradient(
colors: [AppTheme.primaryGreen, Color(0xFF81C784)],
begin: Alignment.topLeft,
end: Alignment.bottomRight,
),
boxShadow: [
BoxShadow(
color: AppTheme.primaryGreen.withAlpha(40),
blurRadius: 15,
spreadRadius: 2,
),
],
),
child: Container(
margin: const EdgeInsets.all(4),
decoration: const BoxDecoration(
color: Colors.white,
shape: BoxShape.circle,
),
child: const Center(
child: Icon(
Icons.manage_accounts_rounded,
size: 56,
color: AppTheme.primaryGreen,
),
),
),
);
}
Widget _buildMenuTile({
required IconData icon,
required String title,
required VoidCallback onTap,
bool isDestructive = false,
}) {
final color = isDestructive ? Colors.red.shade700 : AppTheme.primaryGreen;
return GestureDetector(
onTap: onTap,
child: Container(
padding: const EdgeInsets.symmetric(horizontal: 16, vertical: 14),
decoration: BoxDecoration(
color: isDestructive ? Colors.red.withAlpha(10) : AppTheme.backgroundBeige.withAlpha(50),
borderRadius: BorderRadius.circular(16),
),
child: Row(
children: [
Container(
padding: const EdgeInsets.all(8),
decoration: BoxDecoration(
color: isDestructive ? Colors.red.withAlpha(20) : AppTheme.primaryGreen.withAlpha(20),
shape: BoxShape.circle,
),
child: Icon(icon, color: color, size: 22),
),
const SizedBox(width: 16),
Expanded(
child: Text(
title,
style: TextStyle(
fontSize: 16,
fontWeight: FontWeight.w600,
color: isDestructive ? color : AppTheme.textDark,
),
),
),
Icon(Icons.chevron_right_rounded, color: AppTheme.textLight.withAlpha(100)),
],
),
),
);
}
}