import 'package:flutter/material.dart'; import 'package:shadcn_ui/shadcn_ui.dart'; import '../core/app_colors.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) { return GestureDetector( onTap: onTap, behavior: HitTestBehavior.opaque, child: Container( margin: const EdgeInsets.symmetric(horizontal: 24, vertical: 4), padding: const EdgeInsets.symmetric(horizontal: 16, vertical: 14), decoration: BoxDecoration( color: Colors.white, borderRadius: BorderRadius.circular(16), boxShadow: [BoxShadow(color: Colors.black.withAlpha(6), blurRadius: 8, offset: const Offset(0, 2))], ), child: Row(children: [ Container( width: 40, height: 40, decoration: BoxDecoration( color: AppColors.cardInner, borderRadius: BorderRadius.circular(12), ), child: Icon(icon, size: 22, color: AppColors.textPrimary), ), const SizedBox(width: 14), Expanded( child: Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ Text(title, style: const TextStyle(fontSize: 17, fontWeight: FontWeight.w500, color: AppColors.textPrimary)), if (subtitle != null && subtitle!.isNotEmpty) Padding( padding: const EdgeInsets.only(top: 2), child: Text(subtitle!, style: const TextStyle(fontSize: 14, color: AppColors.textHint)), ), ], ), ), if (trailing != null && trailing!.isNotEmpty) Text(trailing!, style: const TextStyle(fontSize: 15, color: AppColors.textHint)), const SizedBox(width: 4), const Icon(Icons.chevron_right, size: 20, color: AppColors.textHint), ]), ), ); } }