import 'package:flutter/material.dart'; import 'package:shared_preferences/shared_preferences.dart'; import 'package:google_fonts/google_fonts.dart'; import '../login.dart'; class ProfilePage extends StatelessWidget { final Map userData; final bool isTab; const ProfilePage({super.key, required this.userData, this.isTab = true}); // --- Tailwind DESIGN TOKENS --- final Color primary = const Color(0xFF0058BE); final Color onPrimary = const Color(0xFFFFFFFF); final Color primaryContainer = const Color(0xFF2170E4); final Color background = const Color(0xFFF7F9FB); final Color surface = const Color(0xFFF7F9FB); final Color surfaceContainerLowest = const Color(0xFFFFFFFF); final Color surfaceContainerLow = const Color(0xFFF0F4F8); final Color onSurface = const Color(0xFF191C1E); final Color onSurfaceVariant = const Color(0xFF424754); final Color outlineVariant = const Color(0xFFC2C6D6); final Color outline = const Color(0xFF727785); final Color error = const Color(0xFFBA1A1A); @override Widget build(BuildContext context) { String displayName = userData['user']?['name'] ?? 'Driver'; String email = userData['user']?['email'] ?? "Tidak ada email"; Widget content = SafeArea( child: SingleChildScrollView( padding: const EdgeInsets.symmetric(horizontal: 20, vertical: 16), child: Column( crossAxisAlignment: CrossAxisAlignment.stretch, children: [ _buildProfileHero(displayName, email), const SizedBox(height: 24), _buildLogoutButton(context), const SizedBox(height: 32), _buildVersionFooter(), const SizedBox(height: 24), // padding for bottom nav ], ), ), ); if (isTab) return content; return Scaffold( backgroundColor: surface, body: content, ); } Widget _buildProfileHero(String name, String email) { return Container( width: double.infinity, padding: const EdgeInsets.all(16), decoration: BoxDecoration( gradient: const LinearGradient( colors: [ Color(0xFF2170E4), Color(0xFF004395) ], // Matches HTML linear-gradient begin: Alignment.topLeft, end: Alignment.bottomRight, ), borderRadius: BorderRadius.circular(16), boxShadow: [ BoxShadow( color: Colors.black.withOpacity(0.1), blurRadius: 4, offset: const Offset(0, 2)) ], ), child: Stack( children: [ // Decorative circle Positioned( right: -16, top: -16, child: Container( width: 96, height: 96, decoration: BoxDecoration( shape: BoxShape.circle, color: Colors.white.withOpacity(0.05), ), ), ), Row( children: [ Container( width: 64, height: 64, decoration: BoxDecoration( shape: BoxShape.circle, border: Border.all( color: Colors.white.withOpacity(0.3), width: 2), boxShadow: [ BoxShadow( color: Colors.black.withOpacity(0.05), blurRadius: 2) ], ), child: CircleAvatar( backgroundColor: Colors.white, child: Icon(Icons.person, color: primary, size: 40), ), ), const SizedBox(width: 16), Expanded( child: Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ Text( name, style: GoogleFonts.inter( fontSize: 18, fontWeight: FontWeight.w600, color: Colors.white, letterSpacing: -0.5), maxLines: 1, overflow: TextOverflow.ellipsis, ), const SizedBox(height: 2), Text( email, style: GoogleFonts.inter( fontSize: 13, color: Colors.white.withOpacity(0.9)), maxLines: 1, overflow: TextOverflow.ellipsis, ), ], ), ) ], ) ], ), ); } Widget _buildLogoutButton(BuildContext context) { return Material( color: Colors.transparent, child: InkWell( onTap: () async { final prefs = await SharedPreferences.getInstance(); await prefs.remove('userData'); await prefs.remove('sent_wa_messages'); await prefs.remove('sent_wa_messages_v2'); if (!context.mounted) return; Navigator.of(context).pushAndRemoveUntil( MaterialPageRoute(builder: (_) => const LoginPage()), (route) => false); }, borderRadius: BorderRadius.circular(12), highlightColor: error.withOpacity(0.1), splashColor: error.withOpacity(0.05), child: Container( width: double.infinity, padding: const EdgeInsets.symmetric(vertical: 14), decoration: BoxDecoration( border: Border.all(color: outlineVariant.withOpacity(0.3)), borderRadius: BorderRadius.circular(12), ), child: Row( mainAxisAlignment: MainAxisAlignment.center, children: [ Icon(Icons.logout, color: error, size: 20), const SizedBox(width: 8), Text( "Keluar", style: GoogleFonts.inter( fontSize: 14, fontWeight: FontWeight.w500, color: error), ), ], ), ), ), ); } Widget _buildVersionFooter() { return Center( child: Text( "", textAlign: TextAlign.center, style: GoogleFonts.inter( fontSize: 11, fontWeight: FontWeight.w500, letterSpacing: 0.5, color: onSurfaceVariant.withOpacity(0.4), ), ), ); } }