maps/mobile/lib/features/search/presentation/widgets/search_result_tile.dart
2026-03-30 09:22:16 +02:00

76 lines
1.8 KiB
Dart

import 'package:flutter/material.dart';
import '../../data/search_repository.dart';
class SearchResultTile extends StatelessWidget {
final SearchResult result;
final VoidCallback onTap;
const SearchResultTile({
super.key,
required this.result,
required this.onTap,
});
IconData _iconForType(String type) {
switch (type) {
case 'house':
case 'building':
return Icons.home;
case 'street':
return Icons.add_road;
case 'city':
case 'town':
case 'village':
return Icons.location_city;
case 'park':
return Icons.park;
case 'restaurant':
return Icons.restaurant;
case 'cafe':
return Icons.local_cafe;
case 'shop':
case 'supermarket':
return Icons.shopping_cart;
case 'hotel':
return Icons.hotel;
case 'hospital':
case 'pharmacy':
return Icons.local_hospital;
default:
return Icons.place;
}
}
@override
Widget build(BuildContext context) {
return ListTile(
leading: CircleAvatar(
backgroundColor:
Theme.of(context).colorScheme.primaryContainer,
child: Icon(
_iconForType(result.type),
color: Theme.of(context).colorScheme.onPrimaryContainer,
size: 20,
),
),
title: Text(
result.name,
maxLines: 1,
overflow: TextOverflow.ellipsis,
),
subtitle: Text(
result.displayAddress,
maxLines: 1,
overflow: TextOverflow.ellipsis,
style: Theme.of(context).textTheme.bodySmall,
),
trailing: Text(
result.type,
style: Theme.of(context).textTheme.labelSmall?.copyWith(
color: Theme.of(context).colorScheme.outline,
),
),
onTap: onTap,
);
}
}