summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorxengineering <me@xengineering.eu>2026-01-11 20:26:03 +0100
committerxengineering <me@xengineering.eu>2026-01-11 20:26:03 +0100
commitad86cd926d5da6031930de79cbe85df7ff40df1c (patch)
treee13de1e14ca42f31466416c3f17a2bc98f385a73
parent0692db03e155054c8732da49eefba44d9c7ea549 (diff)
downloadsia-app-ad86cd926d5da6031930de79cbe85df7ff40df1c.tar
sia-app-ad86cd926d5da6031930de79cbe85df7ff40df1c.tar.zst
sia-app-ad86cd926d5da6031930de79cbe85df7ff40df1c.zip
Switch to Map address to state for contacts
This map should be empty in the future and updated based on the incoming MQTT messages. A list was not the correct data structure for that since it requires to iterate over the whole list to find the entry with a certain address. But this is required to update the state of an already known contact.
-rw-r--r--lib/data.dart27
-rw-r--r--lib/ui.dart10
2 files changed, 18 insertions, 19 deletions
diff --git a/lib/data.dart b/lib/data.dart
index 93c523d..c0d640f 100644
--- a/lib/data.dart
+++ b/lib/data.dart
@@ -3,12 +3,12 @@ import 'dart:async';
import 'package:flutter/foundation.dart';
class AppState with ChangeNotifier {
- List<Contact> contacts = <Contact>[
- Contact(address: "Living Room Window", isOpen: false),
- Contact(address: "Front Door", isOpen: true),
- Contact(address: "Back Door", isOpen: false),
- Contact(address: "Garage Window", isOpen: true),
- ];
+ Map<String, bool> contacts = <String, bool>{
+ 'Living Room Window': false,
+ 'Front Door': true,
+ 'Back Door': false,
+ 'Garage Window': true,
+ };
Timer? _timer;
@@ -23,8 +23,12 @@ class AppState with ChangeNotifier {
return;
}
- contacts[0].isOpen = !contacts[0].isOpen;
- notifyListeners();
+ const String choosen = 'Living Room Window';
+ bool? state = contacts[choosen];
+ if (state != null) {
+ contacts[choosen] = !state;
+ notifyListeners();
+ }
}
@override
@@ -33,10 +37,3 @@ class AppState with ChangeNotifier {
super.dispose();
}
}
-
-class Contact {
- final String address;
- bool isOpen;
-
- Contact({required this.address, required this.isOpen});
-}
diff --git a/lib/ui.dart b/lib/ui.dart
index d4618cf..4a513c6 100644
--- a/lib/ui.dart
+++ b/lib/ui.dart
@@ -26,13 +26,15 @@ class ContactList extends StatelessWidget {
return ListView.builder(
itemCount: state.contacts.length,
itemBuilder: (BuildContext context, int index) {
- final Contact contact = state.contacts[index];
+ MapEntry<String, bool> data = state.contacts.entries.elementAt(index);
+ String address = data.key;
+ bool isOpen = data.value;
return ListTile(
leading: Icon(
- contact.isOpen ? Icons.meeting_room : Icons.door_front_door,
- color: contact.isOpen ? Colors.red : Colors.green,
+ isOpen ? Icons.meeting_room : Icons.door_front_door,
+ color: isOpen ? Colors.red : Colors.green,
),
- title: Text(contact.address),
+ title: Text(address),
);
},
);