feat: add sensor move mode to floor plan

This commit is contained in:
2026-05-15 15:46:13 +02:00
parent 2c3e60d2b1
commit 077585bd73
8 changed files with 99 additions and 94 deletions
@@ -59,10 +59,7 @@ class _Body extends ConsumerWidget {
OutlinedButton.icon(
icon: const Icon(Icons.map_outlined),
label: const Text('Locate on floor plan'),
onPressed: () {
ref.read(selectedSensorIdProvider.notifier).state = sensorId;
context.go('/floorplan');
},
onPressed: () => context.go('/floorplan'),
),
const SizedBox(height: 12),
OutlinedButton.icon(
@@ -20,7 +20,8 @@ class SensorDetailSheet extends ConsumerStatefulWidget {
final int sensorId;
@override
ConsumerState<SensorDetailSheet> createState() => _SensorDetailSheetState();
ConsumerState<SensorDetailSheet> createState() =>
_SensorDetailSheetState();
}
class _SensorDetailSheetState extends ConsumerState<SensorDetailSheet> {
@@ -196,7 +197,7 @@ class _SheetBody extends StatelessWidget {
),
const SizedBox(height: 24),
FilledButton.icon(
icon: const Icon(Icons.map_outlined),
icon: Icon(Icons.my_location),
label: Text(sensor.isPlaced
? 'Reposition on floor plan'
: 'Place on floor plan'),
+1 -22
View File
@@ -12,28 +12,11 @@ class SensorListScreen extends ConsumerWidget {
@override
Widget build(BuildContext context, WidgetRef ref) {
final sensors = ref.watch(sensorsProvider);
final selectedId = ref.watch(selectedSensorIdProvider);
return Scaffold(
appBar: AppBar(title: const Text('Sensors')),
body: Column(
children: [
if (selectedId != null)
MaterialBanner(
content: Text('Sensor $selectedId selected on floor plan'),
actions: [
TextButton(
onPressed: () =>
ref.read(selectedSensorIdProvider.notifier).state = null,
child: const Text('Dismiss'),
),
TextButton(
onPressed: () =>
showSensorDetailSheet(context, int.parse(selectedId)),
child: const Text('Open'),
),
],
),
Expanded(
child: sensors.when(
loading: () =>
@@ -54,8 +37,6 @@ class SensorListScreen extends ConsumerWidget {
label: 'Unplaced', count: unplaced.length),
...unplaced.map((s) => _SensorTile(
sensor: s,
isSelected:
selectedId == s.id.toString(),
)),
],
if (placed.isNotEmpty) ...[
@@ -63,8 +44,6 @@ class SensorListScreen extends ConsumerWidget {
label: 'Placed', count: placed.length),
...placed.map((s) => _SensorTile(
sensor: s,
isSelected:
selectedId == s.id.toString(),
)),
],
],
@@ -108,7 +87,7 @@ class _SectionHeader extends StatelessWidget {
}
class _SensorTile extends StatelessWidget {
const _SensorTile({required this.sensor, required this.isSelected});
const _SensorTile({required this.sensor, this.isSelected = false});
final Sensor sensor;
final bool isSelected;