Commit 53e8b7e
Changed files (4)
lib/model/storage/convert_util.dart
@@ -28,6 +28,7 @@ class ConvertUtil {
static String? parseString(dynamic value) {
if (value is String) return value;
if (value is int || value is double || value is bool) return value.toString();
+ // No check for Object. While this would be convertible to string,
return null;
}
lib/model/storage/export_csv_settings_store.dart
@@ -0,0 +1,55 @@
+import 'dart:convert';
+
+import 'package:blood_pressure_app/model/storage/convert_util.dart';
+import 'package:flutter/material.dart';
+
+class CsvExportSettings extends ChangeNotifier {
+ CsvExportSettings({
+ String? fieldDelimiter,
+ String? textDelimiter,
+ bool? exportHeadline
+ }) {
+ if (fieldDelimiter != null) _fieldDelimiter = fieldDelimiter;
+ if (textDelimiter != null) _textDelimiter = textDelimiter;
+ if (exportHeadline != null) _exportHeadline = exportHeadline;
+ }
+
+ factory CsvExportSettings.fromMap(Map<String, dynamic> map) => CsvExportSettings(
+ fieldDelimiter: ConvertUtil.parseString(map['fieldDelimiter']),
+ textDelimiter: ConvertUtil.parseString(map['textDelimiter']),
+ exportHeadline: ConvertUtil.parseBool(map['exportHeadline'])
+ );
+
+ factory CsvExportSettings.fromJson(String json) => CsvExportSettings.fromMap(jsonDecode(json));
+
+ Map<String, dynamic> toMap() => <String, dynamic>{
+ 'fieldDelimiter': fieldDelimiter,
+ 'textDelimiter': textDelimiter,
+ 'exportHeadline': exportHeadline
+ };
+
+ String toJson() => jsonEncode(toMap());
+
+ String _fieldDelimiter = ',';
+ String get fieldDelimiter => _fieldDelimiter;
+ set fieldDelimiter(String value) {
+ _fieldDelimiter = value;
+ notifyListeners();
+ }
+
+ String _textDelimiter = '"';
+ String get textDelimiter => _textDelimiter;
+ set textDelimiter(String value) {
+ _textDelimiter = value;
+ notifyListeners();
+ }
+
+ bool _exportHeadline = true;
+ bool get exportHeadline => _exportHeadline;
+ set exportHeadline(bool value) {
+ _exportHeadline = value;
+ notifyListeners();
+ }
+
+ // Procedure for adding more entries described in the settings_store.dart doc comment
+}
\ No newline at end of file
lib/model/storage/export_pdf_settings_store.dart
@@ -0,0 +1,100 @@
+import 'dart:convert';
+
+import 'package:blood_pressure_app/model/storage/convert_util.dart';
+import 'package:flutter/material.dart';
+
+class PdfExportSettings extends ChangeNotifier {
+ PdfExportSettings({
+ bool? exportTitle,
+ bool? exportStatistics,
+ bool? exportData,
+ double? headerHeight,
+ double? cellHeight,
+ double? headerFontSize,
+ double? cellFontSize,
+ }) {
+ if (exportTitle != null) _exportTitle = exportTitle;
+ if (exportStatistics != null) _exportStatistics = exportStatistics;
+ if (exportData != null) _exportData = exportData;
+ if (headerHeight != null) _headerHeight = headerHeight;
+ if (cellHeight != null) _cellHeight = cellHeight;
+ if (headerFontSize != null) _headerFontSize = headerFontSize;
+ if (cellFontSize != null) _cellFontSize = cellFontSize;
+
+ }
+
+ factory PdfExportSettings.fromMap(Map<String, dynamic> map) => PdfExportSettings(
+ exportTitle: ConvertUtil.parseBool(map['exportTitle']),
+ exportStatistics: ConvertUtil.parseBool(map['exportStatistics']),
+ exportData: ConvertUtil.parseBool(map['exportData']),
+ headerHeight: ConvertUtil.parseDouble(map['headerHeight']),
+ cellHeight: ConvertUtil.parseDouble(map['cellHeight']),
+ headerFontSize: ConvertUtil.parseDouble(map['headerFontSize']),
+ cellFontSize: ConvertUtil.parseDouble(map['cellFontSize']),
+ );
+
+ factory PdfExportSettings.fromJson(String json) => PdfExportSettings.fromMap(jsonDecode(json));
+
+ Map<String, dynamic> toMap() => <String, dynamic>{
+ 'exportTitle': exportTitle,
+ 'exportStatistics': exportStatistics,
+ 'exportData': exportData,
+ 'headerHeight': headerHeight,
+ 'cellHeight': cellHeight,
+ 'headerFontSize': headerFontSize,
+ 'cellFontSize': cellFontSize,
+ };
+
+ String toJson() => jsonEncode(toMap());
+
+ bool _exportTitle = true;
+ bool get exportTitle => _exportTitle;
+ set exportTitle(bool value) {
+ _exportTitle = value;
+ notifyListeners();
+ }
+
+ bool _exportStatistics = false;
+ bool get exportStatistics => _exportStatistics;
+ set exportStatistics(bool value) {
+ _exportStatistics = value;
+ notifyListeners();
+ }
+
+ bool _exportData = true;
+ bool get exportData => _exportData;
+ set exportData(bool value) {
+ _exportData = value;
+ notifyListeners();
+ }
+
+ double _headerHeight = 20;
+ double get headerHeight => _headerHeight;
+ set headerHeight(double value) {
+ _headerHeight = value;
+ notifyListeners();
+ }
+
+ double _cellHeight = 15;
+ double get cellHeight => _cellHeight;
+ set cellHeight(double value) {
+ _cellHeight = value;
+ notifyListeners();
+ }
+
+ double _headerFontSize = 10;
+ double get headerFontSize => _headerFontSize;
+ set headerFontSize(double value) {
+ _headerFontSize = value;
+ notifyListeners();
+ }
+
+ double _cellFontSize = 8;
+ double get cellFontSize => _cellFontSize;
+ set cellFontSize(double value) {
+ _cellFontSize = value;
+ notifyListeners();
+ }
+
+// Procedure for adding more entries described in the settings_store.dart doc comment
+}
\ No newline at end of file
lib/model/storage/export_settings_store.dart
@@ -0,0 +1,88 @@
+import 'dart:convert';
+
+import 'package:blood_pressure_app/model/storage/convert_util.dart';
+import 'package:flutter/material.dart';
+
+class ExportSettings extends ChangeNotifier {
+ ExportSettings({
+ ExportFormat? exportFormat,
+ String? defaultExportDir,
+ bool? exportAfterEveryEntry
+ }) {
+ if (exportFormat != null) _exportFormat = exportFormat;
+ if (defaultExportDir != null) _defaultExportDir = defaultExportDir;
+ if (exportAfterEveryEntry != null) _exportAfterEveryEntry = exportAfterEveryEntry;
+ }
+
+ factory ExportSettings.fromMap(Map<String, dynamic> map) => ExportSettings(
+ exportFormat: ExportFormat.deserialize(map['exportFormat']),
+ defaultExportDir: ConvertUtil.parseString(map['defaultExportDir']),
+ exportAfterEveryEntry: ConvertUtil.parseBool(map['exportAfterEveryEntry'])
+ );
+
+ factory ExportSettings.fromJson(String json) => ExportSettings.fromMap(jsonDecode(json));
+
+ Map<String, dynamic> toMap() => <String, dynamic>{
+ 'exportFormat': exportFormat.serialize(),
+ 'defaultExportDir': defaultExportDir,
+ 'exportAfterEveryEntry': exportAfterEveryEntry
+ };
+
+ String toJson() => jsonEncode(toMap());
+
+ ExportFormat _exportFormat = ExportFormat.csv;
+ ExportFormat get exportFormat => _exportFormat;
+ set exportFormat(ExportFormat value) {
+ _exportFormat = value;
+ notifyListeners();
+ }
+
+ String _defaultExportDir = '';
+ String get defaultExportDir => _defaultExportDir;
+ set defaultExportDir(String value) {
+ _defaultExportDir = value;
+ notifyListeners();
+ }
+
+ bool _exportAfterEveryEntry = false;
+ bool get exportAfterEveryEntry => _exportAfterEveryEntry;
+ set exportAfterEveryEntry(bool value) {
+ _exportAfterEveryEntry = value;
+ notifyListeners();
+ }
+
+}
+
+enum ExportFormat {
+ csv,
+ pdf,
+ db;
+
+ int serialize() {
+ switch(this) {
+ case ExportFormat.csv:
+ return 0;
+ case ExportFormat.pdf:
+ return 1;
+ case ExportFormat.db:
+ return 2;
+ }
+ }
+
+ factory ExportFormat.deserialize(dynamic value) {
+ int? intValue = ConvertUtil.parseInt(value);
+ if (value == null || intValue == null) return ExportFormat.csv;
+
+ switch(intValue) {
+ case 0:
+ return ExportFormat.csv;
+ case 1:
+ return ExportFormat.pdf;
+ case 2:
+ return ExportFormat.db;
+ default:
+ assert(false);
+ return ExportFormat.csv;
+ }
+ }
+}
\ No newline at end of file