import 'package:flutter/material.dart'; import 'package:household_keeper/features/rooms/domain/room_icons.dart'; /// Shows a modal bottom sheet with a grid of curated Material Icons. /// /// Returns the selected icon name, or null if dismissed. Future showIconPickerSheet({ required BuildContext context, String? selectedIconName, }) { return showModalBottomSheet( context: context, isScrollControlled: true, builder: (context) => IconPickerSheet( selectedIconName: selectedIconName, onIconSelected: (name) => Navigator.of(context).pop(name), ), ); } /// Grid of curated household Material Icons for room icon selection. class IconPickerSheet extends StatelessWidget { const IconPickerSheet({ super.key, this.selectedIconName, required this.onIconSelected, }); final String? selectedIconName; final ValueChanged onIconSelected; @override Widget build(BuildContext context) { final theme = Theme.of(context); final colorScheme = theme.colorScheme; return SafeArea( child: Padding( padding: const EdgeInsets.all(16), child: Column( mainAxisSize: MainAxisSize.min, children: [ // Drag handle Container( width: 32, height: 4, margin: const EdgeInsets.only(bottom: 16), decoration: BoxDecoration( color: colorScheme.onSurfaceVariant.withValues(alpha: 0.4), borderRadius: BorderRadius.circular(2), ), ), Text( 'Symbol w\u00e4hlen', style: theme.textTheme.titleMedium, ), const SizedBox(height: 16), GridView.count( crossAxisCount: 5, shrinkWrap: true, physics: const NeverScrollableScrollPhysics(), mainAxisSpacing: 8, crossAxisSpacing: 8, children: curatedRoomIcons.map((entry) { final isSelected = entry.name == selectedIconName; return InkWell( onTap: () => onIconSelected(entry.name), borderRadius: BorderRadius.circular(12), child: Container( decoration: BoxDecoration( color: isSelected ? colorScheme.primaryContainer : Colors.transparent, borderRadius: BorderRadius.circular(12), ), child: Icon( entry.icon, size: 28, color: isSelected ? colorScheme.onPrimaryContainer : colorScheme.onSurface, ), ), ); }).toList(), ), const SizedBox(height: 8), ], ), ), ); } }