import 'package:flutter/material.dart'; import 'package:flutter/services.dart'; import 'package:share_plus/share_plus.dart'; import '../../../constants/app_constants.dart'; class PopMenu extends StatelessWidget { final VoidCallback? onRefresh; final VoidCallback? onEdit; final VoidCallback? onScanQr; final VoidCallback? onDarkMode; final VoidCallback? onSettings; const PopMenu({ super.key, this.onRefresh, this.onEdit, this.onScanQr, this.onDarkMode, this.onSettings, }); static Future shareApp(BuildContext context) async { try { const String shareText = '情景诗词App - 一款优雅的诗词学习应用,包含丰富的诗词内容和答题功能'; final result = await Share.shareWithResult(shareText, subject: '情景诗词App'); if (result.status == ShareResultStatus.success) { if (context.mounted) { ScaffoldMessenger.of( context, ).showSnackBar(const SnackBar(content: Text('分享成功!'))); } } } catch (e) { if (context.mounted) { ScaffoldMessenger.of( context, ).showSnackBar(const SnackBar(content: Text('该平台暂不支持分享功能'))); } } } static void show( BuildContext context, { VoidCallback? onRefresh, VoidCallback? onEdit, VoidCallback? onScanQr, VoidCallback? onDarkMode, VoidCallback? onSettings, }) { showModalBottomSheet( context: context, backgroundColor: Colors.transparent, builder: (context) => PopMenu( onRefresh: onRefresh, onEdit: onEdit, onScanQr: onScanQr, onDarkMode: onDarkMode, onSettings: onSettings, ), ); } @override Widget build(BuildContext context) { return Container( decoration: const BoxDecoration( color: Colors.white, borderRadius: BorderRadius.vertical(top: Radius.circular(20)), ), child: Column( mainAxisSize: MainAxisSize.min, children: [ // 顶部拖拽条 Container( width: 40, height: 4, margin: const EdgeInsets.only(top: 8), decoration: BoxDecoration( color: Colors.grey[300]!, borderRadius: BorderRadius.circular(2), ), ), // 选项列表 _buildBottomSheetItem(context, '刷新数据', Icons.refresh, onRefresh), _buildBottomSheetItem(context, '分享软件', Icons.share, () { shareApp(context); }), _buildBottomSheetItem( context, '扫描二维码', Icons.qr_code_scanner, onScanQr, ), _buildBottomSheetItem(context, '夜间模式', Icons.dark_mode, onDarkMode), const SizedBox(height: 20), _buildBottomSheetItem(context, '设置', Icons.settings, onSettings), ], ), ); } Widget _buildBottomSheetItem( BuildContext context, String title, IconData icon, VoidCallback? onTap, ) { return ListTile( leading: Icon(icon, color: AppConstants.primaryColor), title: Text(title), onTap: () { Navigator.pop(context); HapticFeedback.lightImpact(); if (onTap != null) { onTap(); } }, ); } }