main
1import 'dart:convert';
2
3import 'package:blood_pressure_app/model/storage/convert_util.dart';
4import 'package:flutter/material.dart';
5
6/// General settings for exporting measurements that are applicable to all export formats.
7class ExportSettings extends ChangeNotifier {
8 ExportSettings({
9 ExportFormat? exportFormat,
10 String? defaultExportDir,
11 bool? exportAfterEveryEntry,
12 }) {
13 if (exportFormat != null) _exportFormat = exportFormat;
14 if (defaultExportDir != null) _defaultExportDir = defaultExportDir;
15 if (exportAfterEveryEntry != null) _exportAfterEveryEntry = exportAfterEveryEntry;
16 }
17
18 factory ExportSettings.fromMap(Map<String, dynamic> map) => ExportSettings(
19 exportFormat: ExportFormat.deserialize(map['exportFormat']),
20 defaultExportDir: ConvertUtil.parseString(map['defaultExportDir']),
21 exportAfterEveryEntry: ConvertUtil.parseBool(map['exportAfterEveryEntry']),
22 );
23
24 factory ExportSettings.fromJson(String json) {
25 try {
26 return ExportSettings.fromMap(jsonDecode(json));
27 } catch (exception) {
28 return ExportSettings();
29 }
30 }
31
32 Map<String, dynamic> toMap() => <String, dynamic>{
33 'exportFormat': exportFormat.serialize(),
34 'defaultExportDir': defaultExportDir,
35 'exportAfterEveryEntry': exportAfterEveryEntry,
36 };
37
38 /// Serialize the object to a restoreable string.
39 String toJson() => jsonEncode(toMap());
40
41 /// Copy all values from another instance.
42 void copyFrom(ExportSettings other) {
43 _exportFormat = other._exportFormat;
44 _defaultExportDir = other._defaultExportDir;
45 _exportAfterEveryEntry = other._exportAfterEveryEntry;
46 notifyListeners();
47 }
48
49 /// Reset all fields to their default values.
50 void reset() => copyFrom(ExportSettings());
51
52 ExportFormat _exportFormat = ExportFormat.csv;
53 ExportFormat get exportFormat => _exportFormat;
54 set exportFormat(ExportFormat value) {
55 _exportFormat = value;
56 notifyListeners();
57 }
58
59 String _defaultExportDir = '';
60 String get defaultExportDir => _defaultExportDir;
61 set defaultExportDir(String value) {
62 _defaultExportDir = value;
63 notifyListeners();
64 }
65
66 bool _exportAfterEveryEntry = false;
67 bool get exportAfterEveryEntry => _exportAfterEveryEntry;
68 set exportAfterEveryEntry(bool value) {
69 _exportAfterEveryEntry = value;
70 notifyListeners();
71 }
72
73}
74
75/// File formats to which measurements can be exported.
76enum ExportFormat {
77 csv,
78 xsl,
79 pdf,
80 db;
81
82 int serialize() => switch(this) {
83 ExportFormat.csv => 0,
84 ExportFormat.pdf => 1,
85 ExportFormat.db => 2,
86 ExportFormat.xsl => 3,
87 };
88
89 factory ExportFormat.deserialize(value) {
90 final int? intValue = ConvertUtil.parseInt(value);
91 if (value == null || intValue == null) return ExportFormat.csv;
92
93 switch(intValue) {
94 case 0:
95 return ExportFormat.csv;
96 case 1:
97 return ExportFormat.pdf;
98 case 2:
99 return ExportFormat.db;
100 case 3:
101 return ExportFormat.xsl;
102 default:
103 assert(false);
104 return ExportFormat.csv;
105 }
106 }
107}