Commit 80a8f57
derdilla <82763757+NobodyForNothing@users.noreply.github.com>
2023-12-19 18:45:07
reimplement export on new entry
Signed-off-by: derdilla <82763757+NobodyForNothing@users.noreply.github.com>
Changed files (2)
lib
model
screens
subsettings
export_import
lib/model/blood_pressure.dart
@@ -3,6 +3,7 @@ import 'dart:convert';
import 'package:blood_pressure_app/model/storage/storage.dart';
import 'package:blood_pressure_app/screens/error_reporting.dart';
+import 'package:blood_pressure_app/screens/subsettings/export_import/export_button_bar.dart';
import 'package:collection/collection.dart';
import 'package:flutter/material.dart';
import 'package:path/path.dart';
@@ -112,7 +113,7 @@ class BloodPressureModel extends ChangeNotifier {
if (!context.mounted) return;
final exportSettings = Provider.of<ExportSettings>(context, listen: false);
if (exportSettings.exportAfterEveryEntry) {
- // TODO: reimplement export
+ performExport(context);
}
}
lib/screens/subsettings/export_import/export_button_bar.dart
@@ -41,35 +41,7 @@ class ExportButtonBar extends StatelessWidget {
child: MaterialButton(
height: 60,
child: Text(localizations.export),
- onPressed: () async {
- final exportSettings = Provider.of<ExportSettings>(context, listen: false);
- final filename = 'blood_press_${DateTime.now().toIso8601String()}';
- switch (exportSettings.exportFormat) {
- case ExportFormat.db:
- final path = join(await getDatabasesPath(), 'blood_pressure.db');
-
- if (context.mounted) _exportFile(context, path, '$filename.db', 'text/sqlite');
- break;
- case ExportFormat.csv:
- final csvConverter = CsvConverter(
- Provider.of<CsvExportSettings>(context, listen: false),
- Provider.of<ExportColumnsManager>(context, listen: false),
- );
- final csvString = csvConverter.create(await _getRecords(context));
- final data = Uint8List.fromList(utf8.encode(csvString));
- if (context.mounted) _exportData(context, data, '$filename.csv', 'text/csv');
- break;
- case ExportFormat.pdf:
- final pdfConverter = PdfConverter(
- Provider.of<PdfExportSettings>(context, listen: false),
- localizations,
- Provider.of<Settings>(context, listen: false),
- Provider.of<ExportColumnsManager>(context, listen: false)
- );
- final pdf = await pdfConverter.create(await _getRecords(context));
- if (context.mounted) _exportData(context, pdf, '$filename.pdf', 'text/pdf');
- }
- }
+ onPressed: () => performExport(context, localizations)
)
),
const VerticalDivider(),
@@ -152,38 +124,69 @@ class ExportButtonBar extends StatelessWidget {
void _showError(ScaffoldMessengerState messenger, String text) =>
messenger.showSnackBar(SnackBar(content: Text(text)));
+}
- /// Get the records that should be exported.
- Future<List<BloodPressureRecord>> _getRecords(BuildContext context) {
- final range = Provider.of<IntervallStoreManager>(context, listen: false).exportPage.currentRange;
- final model = Provider.of<BloodPressureModel>(context, listen: false);
- return model.getInTimeRange(range.start, range.end);
- }
+void performExport(BuildContext context, [AppLocalizations? localizations]) async {
+ localizations ??= AppLocalizations.of(context);
+ final exportSettings = Provider.of<ExportSettings>(context, listen: false);
+ final filename = 'blood_press_${DateTime.now().toIso8601String()}';
+ switch (exportSettings.exportFormat) {
+ case ExportFormat.db:
+ final path = join(await getDatabasesPath(), 'blood_pressure.db');
- /// Save to default export path or share by providing a path.
- Future<void> _exportFile(BuildContext context, String path, String fullFileName, String mimeType) async {
- final settings = Provider.of<ExportSettings>(context, listen: false);
- if (settings.defaultExportDir.isEmpty) {
- await PlatformClient.shareFile(path, mimeType, fullFileName);
- } else {
- JSaver.instance.save(
- fromPath: path,
- androidPathOptions: AndroidPathOptions(toDefaultDirectory: true)
+ if (context.mounted) _exportFile(context, path, '$filename.db', 'text/sqlite');
+ break;
+ case ExportFormat.csv:
+ final csvConverter = CsvConverter(
+ Provider.of<CsvExportSettings>(context, listen: false),
+ Provider.of<ExportColumnsManager>(context, listen: false),
);
- ScaffoldMessenger.of(context).showSnackBar(SnackBar(
- content: Text(AppLocalizations.of(context)!.success(settings.defaultExportDir))));
- }
+ final csvString = csvConverter.create(await _getRecords(context));
+ final data = Uint8List.fromList(utf8.encode(csvString));
+ if (context.mounted) _exportData(context, data, '$filename.csv', 'text/csv');
+ break;
+ case ExportFormat.pdf:
+ final pdfConverter = PdfConverter(
+ Provider.of<PdfExportSettings>(context, listen: false),
+ localizations!,
+ Provider.of<Settings>(context, listen: false),
+ Provider.of<ExportColumnsManager>(context, listen: false)
+ );
+ final pdf = await pdfConverter.create(await _getRecords(context));
+ if (context.mounted) _exportData(context, pdf, '$filename.pdf', 'text/pdf');
+ }
+}
+
+/// Get the records that should be exported.
+Future<List<BloodPressureRecord>> _getRecords(BuildContext context) {
+ final range = Provider.of<IntervallStoreManager>(context, listen: false).exportPage.currentRange;
+ final model = Provider.of<BloodPressureModel>(context, listen: false);
+ return model.getInTimeRange(range.start, range.end);
+}
+
+/// Save to default export path or share by providing a path.
+Future<void> _exportFile(BuildContext context, String path, String fullFileName, String mimeType) async {
+ final settings = Provider.of<ExportSettings>(context, listen: false);
+ if (settings.defaultExportDir.isEmpty) {
+ await PlatformClient.shareFile(path, mimeType, fullFileName);
+ } else {
+ JSaver.instance.save(
+ fromPath: path,
+ androidPathOptions: AndroidPathOptions(toDefaultDirectory: true)
+ );
+ ScaffoldMessenger.of(context).showSnackBar(SnackBar(
+ content: Text(AppLocalizations.of(context)!.success(settings.defaultExportDir))));
}
+}
- /// Save to default export path or share by providing binary data.
- Future<void> _exportData(BuildContext context, Uint8List data, String fullFileName, String mimeType) async {
- final settings = Provider.of<ExportSettings>(context, listen: false);
- if (settings.defaultExportDir.isEmpty) {
- await PlatformClient.shareData(data, mimeType, fullFileName);
- } else {
- final file = File(joinPath(Directory.systemTemp.path, fullFileName));
- file.writeAsBytesSync(data);
- await _exportFile(context, file.path, fullFileName, mimeType);
- }
+/// Save to default export path or share by providing binary data.
+Future<void> _exportData(BuildContext context, Uint8List data, String fullFileName, String mimeType) async {
+ final settings = Provider.of<ExportSettings>(context, listen: false);
+ if (settings.defaultExportDir.isEmpty) {
+ await PlatformClient.shareData(data, mimeType, fullFileName);
+ } else {
+ final file = File(joinPath(Directory.systemTemp.path, fullFileName));
+ file.writeAsBytesSync(data);
+ await _exportFile(context, file.path, fullFileName, mimeType);
}
}
\ No newline at end of file