83 lines
2.6 KiB
Dart
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,
|
|
),
|
|
),
|
|
],
|
|
),
|
|
),
|
|
),
|
|
),
|
|
),
|
|
);
|
|
}
|
|
}
|