Files
feature-next-arch/lib/features/home/presentation/widgets/quick_actions_grid.dart
2026-01-18 20:21:14 +08:00

83 lines
2.6 KiB
Dart

import 'package:flutter/material.dart';
import 'package:go_router/go_router.dart';
import 'package:maibu_satabot_v2/core/router/route_paths.dart';
class QuickActionsGrid extends StatelessWidget {
const QuickActionsGrid({super.key});
@override
Widget build(BuildContext context) {
return Padding(
padding: const EdgeInsets.symmetric(horizontal: 16, vertical: 8),
child: Row(
children: [
_buildActionItem(
icon: Icons.videogame_asset_outlined,
label: '远程遥控',
iconColor: Colors.blue,
onTap: () => context.push(RoutePaths.remoteControl),
),
_buildActionItem(
icon: Icons.near_me_outlined,
label: '路径规划',
iconColor: Colors.purple,
onTap: () => context.push(RoutePaths.routePlan),
),
_buildActionItem(
icon: Icons.insights_rounded,
label: '机器状态',
iconColor: Colors.orange,
onTap: () => context.push(RoutePaths.runningStatus),
),
],
),
);
}
// 💡 改造后的构建函数,支持命名参数和点击事件
Widget _buildActionItem({
required IconData icon,
required String label,
required Color iconColor,
required VoidCallback onTap,
}) {
return Expanded(
child: Container(
margin: const EdgeInsets.symmetric(horizontal: 4),
// 💡 使用 Material 和 InkWell 组合来实现点击效果
child: Material(
color: Colors.white,
borderRadius: BorderRadius.circular(20),
child: InkWell(
onTap: onTap,
borderRadius: BorderRadius.circular(20), // 确保水波纹不超出圆角
child: Padding(
padding: const EdgeInsets.symmetric(vertical: 16),
child: Column(
children: [
Container(
padding: const EdgeInsets.all(12),
decoration: BoxDecoration(
color: iconColor.withOpacity(0.1),
borderRadius: BorderRadius.circular(16),
),
child: Icon(icon, color: iconColor),
),
const SizedBox(height: 8),
Text(
label,
style: const TextStyle(
fontSize: 13,
fontWeight: FontWeight.w500,
),
),
],
),
),
),
),
),
);
}
}