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}