diff --git a/lib/addevent.dart b/lib/addevent.dart index 102a491027a77b326a6d06b3f25ea344e7df35b5..f62cb0c8ac39cfd5f2a25b0211fbaa543abfa85d 100644 --- a/lib/addevent.dart +++ b/lib/addevent.dart @@ -1,5 +1,4 @@ import 'dart:convert'; - import 'package:flutter/material.dart'; import 'package:flutter/services.dart'; import 'package:flutter_datetime_picker/flutter_datetime_picker.dart'; diff --git a/lib/configuration.dart b/lib/configuration.dart index 5fda58ad2a2dfbd20d1fd17372d04a5d58f41ad4..9754859f29f7dad4fdd8411b90626126e6c93a2e 100644 --- a/lib/configuration.dart +++ b/lib/configuration.dart @@ -1,4 +1,3 @@ -import 'dart:convert'; import 'dart:io'; import 'package:flutter/material.dart'; import 'package:flutter/services.dart'; @@ -216,7 +215,7 @@ class _MyHomePageState extends State<Configuration> { } } ), - const SizedBox(height: 50.0), + const SizedBox(height: 70.0), TextFormField( minLines: 1, maxLines: 5, @@ -265,6 +264,5 @@ class _MyHomePageState extends State<Configuration> { } //TODO: write configuration on app dispose! -//TODO: align bottom buttons nicely! //TODO: add label prefix with appended upcounting number. //TODO: grey out update button if nothing has changed. ? \ No newline at end of file diff --git a/lib/datamodel.dart b/lib/datamodel.dart index c209847baa7a983b1156d784bb39dac002346cf1..e046e1bce3bd125ea82f7212a4ad5f457169a6d3 100644 --- a/lib/datamodel.dart +++ b/lib/datamodel.dart @@ -1,6 +1,7 @@ import 'dart:convert'; import 'package:flutter/cupertino.dart'; import 'package:flutter/services.dart'; +import 'package:flutter_secure_storage/flutter_secure_storage.dart'; import 'package:shared_preferences/shared_preferences.dart'; class Collection { @@ -261,11 +262,20 @@ abstract class ConfigurationStoreBase { 'currentCollection': currentCollection.toJson(), 'devices': jsonEncode(devices), 'eventTypes': jsonEncode(eventTypes), - 'loginInformation' : loginInformation.toJson(), 'initialized' : initialized, }; } + Map<String, dynamic> loginDataToMap() { + return { + 'loginInformation' : loginInformation.toJson(), + }; + } + + void loginDataFromMap(Map<String, dynamic> map){ + loginInformation = SensorLogin.fromJson(map['loginInformation']); + } + void fromMap(Map<String, dynamic> map) { List<dynamic> dynList = jsonDecode(map['collections']); collections = []; @@ -285,8 +295,6 @@ abstract class ConfigurationStoreBase { for (var element in dynList){ eventTypes.add(EventType.fromJson(element)); } - - loginInformation = SensorLogin.fromJson(map['loginInformation']); initialized = map['initialized']; } @@ -336,20 +344,36 @@ class ConfigurationStoreInstance extends ConfigurationStoreBase { ._internal(); Future<void> storeToSharedPrefs() async { + + const secureStorage = FlutterSecureStorage(); + var writeData = await secureStorage.write(key: 'login', value: jsonEncode(loginDataToMap())); + final prefs = await SharedPreferences.getInstance(); prefs.setString('configuration', jsonEncode(toMap())); + + debugPrint('Stored current configuration to shared prefs'); } Future<void> loadFromSharedPrefs() async { + + const secureStorage = FlutterSecureStorage(); + final String? readData = await secureStorage.read(key: 'login'); + if (readData != null) { + loginDataFromMap(jsonDecode(readData)); + debugPrint('Login loaded from secure storage'); + }else{ + debugPrint('Failed to load login details from secure storage'); + } + final prefs = await SharedPreferences.getInstance(); final String? configuration = prefs.getString('configuration'); if (configuration != null){ - debugPrint('Configuration Current Event String: ' + configuration); + debugPrint('Configuration String: ' + configuration); fromMap(jsonDecode(configuration)); - debugPrint('Configuration Current Event loaded from shared preferences'); + debugPrint('Configuration loaded from shared preferences'); }else{ - debugPrint('Failed to load Current Event configuration from shared preferences.'); + debugPrint('Failed to load configuration from shared preferences.'); } } diff --git a/lib/main.dart b/lib/main.dart index 70016de5d3495e25563243ccee14dccc09786b57..b4946fbb8f4aba0a72a2c9bded473e7abd32a7e2 100644 --- a/lib/main.dart +++ b/lib/main.dart @@ -1,6 +1,4 @@ import 'package:flutter/material.dart'; -import 'package:flutter/services.dart'; -import 'package:flutter_secure_storage/flutter_secure_storage.dart'; import 'datamodel.dart'; import 'addevent.dart'; import 'viewevents.dart'; @@ -8,7 +6,6 @@ import 'overview.dart'; import 'configuration.dart'; import 'databaseconnector.dart'; - Future<void> loadConfiguration() async { final ConfigurationStoreInstance configuration = ConfigurationStoreInstance(); final EventStoreInstance event = EventStoreInstance(); @@ -20,10 +17,6 @@ Future<void> loadConfiguration() async { await configuration.loadFromSharedPrefs(); await event.loadFromSharedPrefs(); - //const storage = FlutterSecureStorage(); //TODO: move login information to secure storage - //Map<String, String> allValues = await storage.readAll(); - //print('Secure Storage: ' + allValues.toString()); - var database = DatabaseInstance(); await database.connect(); //Do once at start of APP! } @@ -31,8 +24,6 @@ Future<void> loadConfiguration() async { void main() { loadConfiguration(); - //configuration.loginInformation = SensorLogin.fromJson({"mail":"admin","password":"adminadmin"}); //TODO: replace for productive version. - runApp(MaterialApp( title: 'Mobile Event Log', theme: ThemeData( diff --git a/lib/viewevents.dart b/lib/viewevents.dart index 6d843b802597b9b117258e3475dd28e2c7e5dbe0..12b3330d0334b0a2b241a40a9d5f179942b080d9 100644 --- a/lib/viewevents.dart +++ b/lib/viewevents.dart @@ -1,4 +1,3 @@ -import 'dart:io'; import 'package:flutter/material.dart'; import 'datamodel.dart'; import 'sensorconnector.dart';