53 lines
1.5 KiB
Dart
53 lines
1.5 KiB
Dart
import 'package:flutter/material.dart';
|
|
import '../../../services/social/rider_profile_models.dart';
|
|
import 'avatar_badge.dart';
|
|
|
|
/// Grid selector for choosing a preset rider avatar.
|
|
class AvatarSelector extends StatelessWidget {
|
|
final String? selectedPresetId;
|
|
final ValueChanged<String> onSelected;
|
|
|
|
const AvatarSelector({
|
|
super.key,
|
|
required this.selectedPresetId,
|
|
required this.onSelected,
|
|
});
|
|
|
|
@override
|
|
Widget build(BuildContext context) {
|
|
return Column(
|
|
crossAxisAlignment: CrossAxisAlignment.start,
|
|
children: [
|
|
const Text(
|
|
'SELECT AVATAR PRESET',
|
|
style: TextStyle(
|
|
color: Colors.white70,
|
|
fontSize: 11,
|
|
fontWeight: FontWeight.w800,
|
|
letterSpacing: 0.8,
|
|
fontFamily: 'Inter',
|
|
),
|
|
),
|
|
const SizedBox(height: 10),
|
|
Wrap(
|
|
spacing: 12,
|
|
runSpacing: 12,
|
|
children: PresetAvatar.availablePresets.map((preset) {
|
|
final isSelected = (selectedPresetId ?? PresetAvatar.availablePresets.first.id) == preset.id;
|
|
return Tooltip(
|
|
message: preset.label,
|
|
child: AvatarBadge(
|
|
avatarPreset: preset.id,
|
|
displayName: preset.label,
|
|
radius: 22,
|
|
isSelected: isSelected,
|
|
onTap: () => onSelected(preset.id),
|
|
),
|
|
);
|
|
}).toList(),
|
|
),
|
|
],
|
|
);
|
|
}
|
|
}
|