Files
hackathon-innovaflow5.0-cdf…/recolecta_app/lib/features/addresses/address_map_card.dart
shinra32 45ffba69b2 Co-authored-by: eddgranados12 <eddgranados12@users.noreply.github.com>
Co-authored-by: MENDOZA BALLARDO GAEL RICARDO <gael-meb123@users.noreply.github.com>
Co-authored-by: Azareth-Tr <Azareth-Tr@users.noreply.github.com>

modificacion de las vistas principales para el usuario ciudadano, primer avance para el panel admin
2026-05-23 03:13:46 -06:00

122 lines
3.7 KiB
Dart

import 'package:flutter/material.dart';
import 'package:flutter_map/flutter_map.dart';
import 'package:latlong2/latlong.dart';
import '../../core/theme/app_theme.dart';
import '../home/colonias_data.dart';
class AddressMapCard extends StatelessWidget {
final String label;
final String street;
final String colonia;
final double? lat;
final double? lng;
const AddressMapCard({
super.key,
required this.label,
required this.street,
required this.colonia,
this.lat,
this.lng,
});
@override
Widget build(BuildContext context) {
// Si existen coordenadas exactas las usa, de lo contrario cae al centro de la colonia
final center = (lat != null && lng != null)
? LatLng(lat!, lng!)
: kColoniaCenter(colonia);
return Container(
margin: const EdgeInsets.only(bottom: 16),
decoration: BoxDecoration(
color: AppTheme.surface,
borderRadius: BorderRadius.circular(AppTheme.radiusLg),
border: Border.all(color: AppTheme.border, width: 0.5),
boxShadow: AppTheme.softShadow,
),
clipBehavior: Clip.hardEdge,
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
// ── Mapa no interactivo ──
SizedBox(
height: 130,
child: FlutterMap(
options: MapOptions(
initialCenter: center,
initialZoom: 16.0,
// ¡Esta línea desactiva todas las interacciones!
interactionOptions: const InteractionOptions(
flags: InteractiveFlag.none,
),
),
children: [
TileLayer(
urlTemplate: 'https://tile.openstreetmap.org/{z}/{x}/{y}.png',
userAgentPackageName: 'com.onlineshack.recolecta',
),
MarkerLayer(
markers: [
Marker(
point: center,
width: 36,
height: 36,
child: const Icon(
Icons.home_rounded,
color: AppTheme.primary,
size: 36,
),
),
],
),
],
),
),
// ── Información en texto ──
Padding(
padding: const EdgeInsets.all(16),
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Row(
children: [
Icon(
label.toLowerCase().contains('negocio')
? Icons.storefront
: Icons.home_outlined,
color: AppTheme.primary,
size: 20,
),
const SizedBox(width: 8),
Text(
label,
style: const TextStyle(
fontSize: 16,
fontWeight: FontWeight.w600,
color: AppTheme.textPrimary,
),
),
],
),
const SizedBox(height: 8),
Text(street, style: const TextStyle(fontSize: 14)),
const SizedBox(height: 2),
Text(
'Colonia $colonia',
style: const TextStyle(
fontSize: 13,
color: AppTheme.textSecondary,
),
),
],
),
),
],
),
);
}
}