Files
wushu/lib/views/profile/components/pop-menu.dart
2026-03-31 21:59:07 +08:00

164 lines
4.5 KiB
Dart

import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
import 'package:share_plus/share_plus.dart';
import '../../../constants/app_constants.dart';
import 'package:wakelock_plus/wakelock_plus.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<void> 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<void> toggleScreenWake(BuildContext context) async {
try {
// 检查当前状态
final bool isEnabled = await WakelockPlus.enabled;
// 切换状态
if (isEnabled) {
await WakelockPlus.disable();
if (context.mounted) {
ScaffoldMessenger.of(
context,
).showSnackBar(const SnackBar(content: Text('屏幕常亮已关闭')));
}
} else {
await WakelockPlus.enable();
if (context.mounted) {
ScaffoldMessenger.of(
context,
).showSnackBar(const SnackBar(content: Text('屏幕常亮已开启')));
}
}
} catch (e) {
if (context.mounted) {
showDialog(
context: context,
builder: (context) => AlertDialog(
title: const Text('提示'),
content: const Text('该设备不支持屏幕常亮功能'),
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.screen_lock_rotation,
() => toggleScreenWake(context),
),
_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();
}
},
);
}
}