import 'package:flutter/material.dart'; import 'package:flutter/services.dart'; import 'package:flutter/foundation.dart' show kIsWeb; import 'package:share_plus/share_plus.dart'; import '../../../constants/app_constants.dart'; import '../../../services/wakelock_service.dart'; import '../guide/beginner_page.dart'; import 'dart:io' as io; 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 Future toggleScreenWake(BuildContext context) async { // Web 平台不支持 wakelock_plus if (kIsWeb) { if (context.mounted) { ScaffoldMessenger.of( context, ).showSnackBar(const SnackBar(content: Text('Web 平台不支持屏幕常亮功能'))); } return; } try { // 使用 io.Platform 检测平台 final String osName = io.Platform.operatingSystem; final String osVersion = io.Platform.operatingSystemVersion; print('Current platform: $osName, version: $osVersion'); // 直接尝试启用屏幕常亮 await WakelockService.instance.enable(); if (context.mounted) { ScaffoldMessenger.of( context, ).showSnackBar(const SnackBar(content: Text('屏幕常亮已开启'))); } } catch (e, stackTrace) { print('WakelockService error: $e'); print('Stack trace: $stackTrace'); if (context.mounted) { // 检查错误类型,判断是否是设备不支持 String errorMessage; if (e.toString().contains('not supported') || e.toString().contains('unsupported') || e.toString().contains('不支持')) { errorMessage = '该设备不支持屏幕常亮功能'; } else { errorMessage = '屏幕常亮功能异常: $e'; } showDialog( context: context, builder: (context) => AlertDialog( title: const Text('提示'), content: Text(errorMessage), actions: [ TextButton( onPressed: () => Navigator.pop(context), child: const 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.menu_book, () { Navigator.of(context).push( MaterialPageRoute(builder: (_) => const BeginnerPage()), ); }), _buildBottomSheetItem(context, '取消', Icons.settings, onSettings), const SizedBox(height: 20), _buildBottomSheetItem(context, '返回桌面', Icons.exit_to_app, () { SystemNavigator.pop(); }), ], ), ); } 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(); } }, ); } }