Commit e77f3c3

derdilla <82763757+derdilla@users.noreply.github.com>
2025-08-07 14:33:08
Implement legacy file export (#584)
1 parent 1efde86
Changed files (2)
app
app/lib/features/settings/version_screen.dart
@@ -1,9 +1,15 @@
+import 'dart:io';
+
 import 'package:blood_pressure_app/data_util/consistent_future_builder.dart';
 import 'package:blood_pressure_app/logging.dart';
+import 'package:blood_pressure_app/screens/error_reporting_screen.dart';
+import 'package:file_picker/file_picker.dart';
 import 'package:flutter/material.dart';
 import 'package:flutter/services.dart';
 import 'package:blood_pressure_app/l10n/app_localizations.dart';
 import 'package:package_info_plus/package_info_plus.dart';
+import 'package:path/path.dart';
+import 'package:sqflite/sqflite.dart';
 
 /// Screen that shows app version and debug options.
 class VersionScreen extends StatefulWidget {
@@ -61,6 +67,30 @@ class _VersionScreenState extends State<VersionScreen> with TypeLogger {
               value: Log.isVerbose,
               onChanged: (v) =>  setState(() => Log.setVerbose(v)),
             ),
+            FutureBuilder(future: Future(() async {
+              final dbPath = await getDatabasesPath();
+              return join(dbPath, 'blood_pressure.db');
+            }), builder: (context, snapshot) {
+              if (snapshot.data == null || !File(snapshot.data!).existsSync()) {
+                return SizedBox.shrink();
+              }
+              return ListTile(
+                onTap: () async {
+                  try {
+                    await FilePicker.platform.saveFile(
+                      fileName: 'blood_pressure.db',
+                      bytes: File(snapshot.data!).readAsBytesSync(),
+                      type: FileType.any, // application/vnd.sqlite3
+                    );
+                  } catch(e) {
+                    if (!context.mounted) return;
+                    ScaffoldMessenger.of(context).showSnackBar(SnackBar(
+                      content: Text('ERR: $e'),),);
+                  }
+                },
+                title: const Text('rescue legacy db'),
+              );
+            }),
             ListTile(
               title: Text('Logs:'),
               trailing: Icon(Icons.copy),
app/lib/screens/error_reporting_screen.dart
@@ -139,7 +139,7 @@ class ErrorScreen extends StatelessWidget {
                           content: Text('ERR: $e'),),);
                       }
                     },
-                    child: const Text('rescue new db'),
+                    child: const Text('rescue db'),
                   ),
                 ],
               ),