import 'package:flutter/material.dart'; import 'package:shadcn_ui/shadcn_ui.dart'; import '../core/app_theme.dart'; /// 统一菜单项,profile_page 和 settings_pages 都共用这个 class AppMenuItem extends StatelessWidget { final IconData icon; final String title; final String? subtitle; final String? trailing; final VoidCallback? onTap; const AppMenuItem({ super.key, required this.icon, required this.title, this.subtitle, this.trailing, this.onTap, }); @override Widget build(BuildContext context) { final theme = ShadTheme.of(context); return GestureDetector( onTap: onTap, behavior: HitTestBehavior.opaque, child: Container( margin: const EdgeInsets.symmetric(horizontal: 24, vertical: 2), padding: const EdgeInsets.symmetric(horizontal: 4, vertical: 14), decoration: BoxDecoration( color: theme.colorScheme.card, borderRadius: BorderRadius.circular(AppTheme.rSm), ), child: Row(children: [ Container( width: 38, height: 38, decoration: BoxDecoration( color: AppTheme.primaryLight, borderRadius: BorderRadius.circular(AppTheme.rSm), ), child: Icon(icon, size: 22, color: AppTheme.primary), ), const SizedBox(width: AppTheme.sLg), Expanded( child: Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ Text(title, style: TextStyle(fontSize: 19, fontWeight: FontWeight.w500, color: theme.colorScheme.foreground)), if (subtitle != null && subtitle!.isNotEmpty) Padding( padding: const EdgeInsets.only(top: 2), child: Text(subtitle!, style: TextStyle(fontSize: 16, color: theme.colorScheme.mutedForeground)), ), ], ), ), if (trailing != null && trailing!.isNotEmpty) Text(trailing!, style: TextStyle(fontSize: 17, color: theme.colorScheme.mutedForeground)), const SizedBox(width: 4), Icon(LucideIcons.chevronRight, size: 21, color: theme.colorScheme.mutedForeground), ]), ), ); } }