Commit 378f24f
Changed files (4)
lib
model
lib/model/storage/convert_util.dart
@@ -96,4 +96,17 @@ class ConvertUtil {
end: DateTime.fromMillisecondsSinceEpoch(endTimestamp)
);
}
+
+ static List<T>? parseList<T>(dynamic value) {
+ if (value is List<T>) return value;
+ if (value is List<dynamic>) {
+ List<T> validValues = [];
+ for (final v in value) {
+ if (v is T) validValues.add(v);
+ }
+ if (value.length == validValues.length) return validValues;
+ }
+ if (value is List && value.isEmpty) return [];
+ return null;
+ }
}
\ No newline at end of file
lib/model/storage/export_csv_settings_store.dart
@@ -1,5 +1,6 @@
import 'dart:convert';
+import 'package:blood_pressure_app/model/export_options.dart';
import 'package:blood_pressure_app/model/storage/convert_util.dart';
import 'package:flutter/material.dart';
@@ -7,17 +8,23 @@ class CsvExportSettings extends ChangeNotifier {
CsvExportSettings({
String? fieldDelimiter,
String? textDelimiter,
- bool? exportHeadline
+ bool? exportHeadline,
+ bool? exportCustomFields,
+ List<String>? customFields,
}) {
if (fieldDelimiter != null) _fieldDelimiter = fieldDelimiter;
if (textDelimiter != null) _textDelimiter = textDelimiter;
if (exportHeadline != null) _exportHeadline = exportHeadline;
+ if (exportCustomFields != null) _exportCustomFields = exportCustomFields;
+ if (customFields != null) _customFields = customFields;
}
factory CsvExportSettings.fromMap(Map<String, dynamic> map) => CsvExportSettings(
fieldDelimiter: ConvertUtil.parseString(map['fieldDelimiter']),
textDelimiter: ConvertUtil.parseString(map['textDelimiter']),
- exportHeadline: ConvertUtil.parseBool(map['exportHeadline'])
+ exportHeadline: ConvertUtil.parseBool(map['exportHeadline']),
+ exportCustomFields: ConvertUtil.parseBool(map['exportCustomFields']),
+ customFields: ConvertUtil.parseList<String>(map['customFields']),
);
factory CsvExportSettings.fromJson(String json) {
@@ -31,7 +38,9 @@ class CsvExportSettings extends ChangeNotifier {
Map<String, dynamic> toMap() => <String, dynamic>{
'fieldDelimiter': fieldDelimiter,
'textDelimiter': textDelimiter,
- 'exportHeadline': exportHeadline
+ 'exportHeadline': exportHeadline,
+ 'exportCustomFields': exportCustomFields,
+ 'customFields': customFields,
};
String toJson() => jsonEncode(toMap());
@@ -57,5 +66,19 @@ class CsvExportSettings extends ChangeNotifier {
notifyListeners();
}
+ bool _exportCustomFields = false;
+ bool get exportCustomFields => _exportCustomFields;
+ set exportCustomFields(bool value) {
+ _exportCustomFields = value;
+ notifyListeners();
+ }
+
+ List<String> _customFields = ExportFields.defaultCsv;
+ List<String> get customFields => _customFields;
+ set customFields(List<String> value) {
+ _customFields = value;
+ notifyListeners();
+ }
+
// Procedure for adding more entries described in the settings_store.dart doc comment
}
\ No newline at end of file
test/model/convert_util_test.dart
@@ -100,5 +100,18 @@ void main() {
expect(ConvertUtil.parseLocale('null'), null);
expect(ConvertUtil.parseLocale('NuLl'), null);
});
+
+ test('parseList should convert valid values correctly', () {
+ expect(ConvertUtil.parseList<int>([1234,567,89,0]), [1234,567,89,0]);
+ expect(ConvertUtil.parseList<String>(['1234','567','89','0', 'test']), ['1234','567','89','0', 'test']);
+ expect(ConvertUtil.parseList<String>(<dynamic>['1234','567','89','0', 'test']), ['1234','567','89','0', 'test']);
+ expect(ConvertUtil.parseList<String>([]), []);
+ });
+ test('parseList should parse invalid values as null', () {
+ expect(ConvertUtil.parseList<int>(['1234','567','89','0', 'test']), null);
+ expect(ConvertUtil.parseList<String>({'test': 5}), null);
+ expect(ConvertUtil.parseList<String>([1234,567,89,0]), null);
+ expect(ConvertUtil.parseList<String>('tests'), null);
+ });
});
}
\ No newline at end of file
test/model/json_serialization_test.dart
@@ -175,12 +175,16 @@ void main() {
fieldDelimiter: 'asdfghjklö',
textDelimiter: 'asdfghjklö2',
exportHeadline: false,
+ exportCustomFields: true,
+ customFields: ['test1', 'test2'],
);
final fromJson = CsvExportSettings.fromJson(initial.toJson());
expect(initial.fieldDelimiter, fromJson.fieldDelimiter);
expect(initial.textDelimiter, fromJson.textDelimiter);
expect(initial.exportHeadline, fromJson.exportHeadline);
+ expect(initial.exportCustomFields, fromJson.exportCustomFields);
+ expect(initial.customFields, fromJson.customFields);
expect(initial.toJson(), fromJson.toJson());
});
@@ -201,6 +205,8 @@ void main() {
expect(v1.fieldDelimiter, CsvExportSettings().fieldDelimiter);
expect(v2.exportHeadline, CsvExportSettings().exportHeadline);
expect(v3.textDelimiter, CsvExportSettings().textDelimiter);
+ expect(v3.exportCustomFields, CsvExportSettings().exportCustomFields);
+ expect(v3.customFields, CsvExportSettings().customFields);
});
});