MobilApp/lib/widgets/map_edit_tools/map_toolbar_action.dart

80 lines
2.3 KiB
Dart
Raw Normal View History

import 'package:flutter/material.dart';
class ToolbarAction extends StatelessWidget {
final IconData icon;
final String label;
final bool selected;
final VoidCallback onTap;
const ToolbarAction({
required this.icon,
required this.label,
required this.selected,
required this.onTap,
});
@override
Widget build(BuildContext context) {
final colorScheme = Theme.of(context).colorScheme;
final foreground = selected
? colorScheme.onPrimaryContainer
: colorScheme.onSurfaceVariant;
final background = selected
? colorScheme.primaryContainer.withOpacity(0.90)
: Colors.transparent;
return Padding(
padding: const EdgeInsets.symmetric(horizontal: 1),
child: Tooltip(
message: label,
waitDuration: const Duration(milliseconds: 500),
child: InkWell(
borderRadius: BorderRadius.circular(16),
onTap: onTap,
child: AnimatedContainer(
duration: const Duration(milliseconds: 160),
curve: Curves.easeOut,
width: 58,
height: 48,
padding: const EdgeInsets.symmetric(horizontal: 4, vertical: 4),
decoration: BoxDecoration(
color: background,
borderRadius: BorderRadius.circular(16),
border: selected
? Border.all(
color: colorScheme.primary.withOpacity(0.35),
width: 1,
)
: null,
),
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: [
Icon(
icon,
size: 21,
color: foreground,
),
const SizedBox(height: 2),
Text(
label,
maxLines: 1,
overflow: TextOverflow.ellipsis,
style: Theme.of(context).textTheme.labelSmall?.copyWith(
color: foreground,
fontWeight:
selected ? FontWeight.w800 : FontWeight.w600,
height: 1.0,
),
),
],
),
),
),
),
);
}
}