Files
wushu/lib/views/profile/components/pop-menu.dart
Developer d6ac0ed1e4 重构
2026-03-31 05:42:47 +08:00

123 lines
3.3 KiB
Dart

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<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 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();
}
},
);
}
}