tap camera to see all tags, persistent settings

This commit is contained in:
stopflock
2025-08-05 18:09:58 -05:00
parent dcdff6abbd
commit faa40c6404
3 changed files with 101 additions and 3 deletions
+61
View File
@@ -0,0 +1,61 @@
import 'package:flutter/material.dart';
import '../models/osm_camera_node.dart';
class CameraTagSheet extends StatelessWidget {
final OsmCameraNode node;
const CameraTagSheet({super.key, required this.node});
@override
Widget build(BuildContext context) {
return SafeArea(
child: Padding(
padding: const EdgeInsets.symmetric(vertical: 16, horizontal: 20),
child: Column(
mainAxisSize: MainAxisSize.min,
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Text('Camera #${node.id}',
style: Theme.of(context).textTheme.titleLarge),
const SizedBox(height: 12),
...node.tags.entries.map(
(e) => Padding(
padding: const EdgeInsets.symmetric(vertical: 2),
child: Row(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Text(
e.key,
style: const TextStyle(
fontWeight: FontWeight.w500,
color: Colors.black87,
),
),
const SizedBox(width: 8),
Expanded(
child: Text(
e.value,
style: const TextStyle(
color: Colors.black54,
),
softWrap: true,
),
),
],
),
),
),
const SizedBox(height: 8),
Align(
alignment: Alignment.centerRight,
child: TextButton(
onPressed: () => Navigator.pop(context),
child: const Text('Close'),
),
),
],
),
),
);
}
}
+11 -1
View File
@@ -13,6 +13,7 @@ import '../app_state.dart';
import '../services/overpass_service.dart';
import '../models/osm_camera_node.dart';
import 'debouncer.dart';
import 'camera_tag_sheet.dart';
class MapView extends StatefulWidget {
const MapView({
@@ -123,7 +124,16 @@ class _MapViewState extends State<MapView> {
point: n.coord,
width: 24,
height: 24,
child: const Icon(Icons.videocam, color: Colors.orange),
child: GestureDetector(
onTap: () {
showModalBottomSheet(
context: context,
builder: (_) => CameraTagSheet(node: n),
showDragHandle: true, // for better UX on Material3
);
},
child: const Icon(Icons.videocam, color: Colors.orange),
),
),
),
];