diff options
Diffstat (limited to 'lib')
| -rw-r--r-- | lib/data.dart | 34 | ||||
| -rw-r--r-- | lib/ui.dart | 11 |
2 files changed, 43 insertions, 2 deletions
diff --git a/lib/data.dart b/lib/data.dart index 365f5bc..302908c 100644 --- a/lib/data.dart +++ b/lib/data.dart @@ -1,6 +1,11 @@ +import 'dart:io'; + import 'package:flutter/foundation.dart'; import 'package:mqtt_client/mqtt_client.dart'; import 'package:mqtt_client/mqtt_server_client.dart'; +import 'package:path_provider/path_provider.dart'; +import 'package:sqlite3/sqlite3.dart'; +import 'package:path/path.dart' as p; const int brokerPort = 1883; const String topicPrefix = 'sia'; @@ -46,9 +51,36 @@ class AppState with ChangeNotifier { Map<String, bool> contacts = <String, bool>{}; late MqttServerClient _client; + late Directory supportDir; String fqdn = ''; - AppState(); + AppState() { + loadPersistence(); + } + + void loadPersistence() async { + supportDir = await getApplicationSupportDirectory(); + String dbPath = p.join(supportDir.path, 'main.sqlite3'); + + final Database db = sqlite3.open(dbPath); + try { + final ResultSet result = db.select( + 'SELECT value FROM key_value WHERE key = \'server_fqdn\';' + ); + if (result.length == 1) { + fqdn = result[0]['value']; + notifyListeners(); + } + } catch (e) { + // loading persistence is optional + } finally { + db.close(); + } + } + + void setFqdn(String value) { + fqdn = value; + } void process(MachineEvent event) { MachineState lastState = state; diff --git a/lib/ui.dart b/lib/ui.dart index 9603562..3a98be9 100644 --- a/lib/ui.dart +++ b/lib/ui.dart @@ -41,8 +41,17 @@ class _ConnectionPageState extends State<ConnectionPage> { final AppState provider = context.read<AppState>(); controller = TextEditingController(text: provider.fqdn); + provider.addListener(() { + if (controller.text != provider.fqdn) { + controller.text = provider.fqdn; + controller.selection = TextSelection.fromPosition( + TextPosition(offset: controller.text.length), + ); + } + }); + controller.addListener(() { - provider.fqdn = controller.text; + provider.setFqdn(controller.text); }); } |
