| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697 |
- import 'dart:io';
- import 'package:file_picker/file_picker.dart';
- import 'package:flutter/foundation.dart';
- import 'package:flutter/material.dart';
- import 'package:intl/intl.dart';
- import 'package:path/path.dart' as p;
- import 'package:path_provider/path_provider.dart';
- import 'package:share_plus/share_plus.dart';
- import '../core/constants.dart';
- class DatabaseExportService {
- DatabaseExportService._();
- static String _exportFileName() {
- final date = DateFormat('yyyy-MM-dd_HHmm').format(DateTime.now());
- return 'Ristoris_export_$date.db';
- }
- static Future<void> export(BuildContext context) async {
- if (kIsWeb) {
- _showError(context, 'Esportazione non supportata su web.');
- return;
- }
- try {
- final sourceFile = File(
- Platform.isAndroid
- ? '${AppConstants.kAndroidDbDir}/${AppConstants.kDbName}'
- : p.join(
- (await getApplicationDocumentsDirectory()).path,
- AppConstants.kDbName,
- ),
- );
- if (!await sourceFile.exists()) {
- if (!context.mounted) return;
- _showError(context, 'File database non trovato.');
- return;
- }
- final fileName = _exportFileName();
- if (Platform.isAndroid || Platform.isIOS) {
- final tempDir = await getTemporaryDirectory();
- final exportFile = File(p.join(tempDir.path, fileName));
- await sourceFile.copy(exportFile.path);
- await Share.shareXFiles([XFile(exportFile.path)]);
- } else if (Platform.isLinux) {
- final home = Platform.environment['HOME'] ?? '';
- final downloadsDir = Directory(p.join(home, 'Downloads'));
- if (!await downloadsDir.exists()) {
- await downloadsDir.create(recursive: true);
- }
- final destFile = File(p.join(downloadsDir.path, fileName));
- await sourceFile.copy(destFile.path);
- } else {
- final result = await FilePicker.platform.saveFile(
- dialogTitle: 'Esporta database',
- fileName: fileName,
- bytes: await sourceFile.readAsBytes(),
- );
- if (result == null) {
- if (!context.mounted) return;
- _showInfo(context, 'Esportazione annullata.');
- return;
- }
- }
- if (!context.mounted) return;
- _showSuccess(context, 'Database esportato con successo.');
- } catch (e) {
- if (!context.mounted) return;
- _showError(context, 'Errore durante l\'esportazione: $e');
- }
- }
- static void _showSuccess(BuildContext context, String message) {
- ScaffoldMessenger.of(context).showSnackBar(
- SnackBar(content: Text(message), backgroundColor: Colors.green),
- );
- }
- static void _showError(BuildContext context, String message) {
- ScaffoldMessenger.of(context).showSnackBar(
- SnackBar(content: Text(message), backgroundColor: Colors.red),
- );
- }
- static void _showInfo(BuildContext context, String message) {
- ScaffoldMessenger.of(context).showSnackBar(
- SnackBar(content: Text(message)),
- );
- }
- }
|