diff options
| -rw-r--r-- | lib/data.dart | 33 | ||||
| -rw-r--r-- | lib/ui.dart | 2 |
2 files changed, 19 insertions, 16 deletions
diff --git a/lib/data.dart b/lib/data.dart index 53c3d01..89d8760 100644 --- a/lib/data.dart +++ b/lib/data.dart @@ -1,5 +1,3 @@ -import 'dart:async'; - import 'package:flutter/foundation.dart'; import 'package:mqtt_client/mqtt_client.dart'; import 'package:mqtt_client/mqtt_server_client.dart'; @@ -23,9 +21,6 @@ class AppState with ChangeNotifier { MachineState.init: <MachineEvent, MachineState> { MachineEvent.connect: MachineState.disconnected, }, - MachineState.disconnected: <MachineEvent, MachineState> { - MachineEvent.disconnect: MachineState.init, - }, }; MachineState state = MachineState.init; @@ -36,22 +31,30 @@ class AppState with ChangeNotifier { bool _serverConnected = false; bool get serverConnected => _serverConnected; - AppState() { - _initMqtt(); - } + AppState(); void process(MachineEvent event) { - Map<MachineEvent, MachineState>? ruleset = machine[state]; - if (ruleset == null) { + MachineState lastState = state; + + Map<MachineEvent, MachineState>? transitions = machine[lastState]; + if (transitions == null) { return; } - MachineState? nextMachineState = ruleset[event]; - if (nextMachineState == null) { + MachineState? nextState = transitions[event]; + if (nextState == null) { return; } - state = nextMachineState; + if (nextState == lastState) { + return; + } + + if (lastState == MachineState.init) { + _initMqtt(); + } + + state = nextState; notifyListeners(); } @@ -61,7 +64,7 @@ class AppState with ChangeNotifier { super.dispose(); } - Future<void> _initMqtt() async { + void _initMqtt() { _client = MqttServerClient( brokerHostname, 'sia_app_${DateTime.now().millisecondsSinceEpoch}', @@ -79,7 +82,7 @@ class AppState with ChangeNotifier { _client.onAutoReconnected = _onAutoReconnected; try { - await _client.connect(); + _client.connect(); } catch (e) { _client.disconnect(); return; diff --git a/lib/ui.dart b/lib/ui.dart index e14895b..1d2ad53 100644 --- a/lib/ui.dart +++ b/lib/ui.dart @@ -113,7 +113,7 @@ class ConnectionStatus extends StatelessWidget { } MachineEvent event = MachineEvent.disconnect; - String action = 'disconnect'; + String action = '(disabled)'; if (state.state == MachineState.init) { event = MachineEvent.connect; action = 'connect'; |
