From 53f07546f7df2215c69b1d8eedcf579e73e6831e Mon Sep 17 00:00:00 2001 From: enriqueloz88 Date: Tue, 6 Feb 2024 19:54:23 +0100 Subject: [PATCH] feat: Improvements in the import/export behavior --- assets/icons/backup/db.svg | 1 - assets/icons/backup/table_file.svg | 1 - lib/app/settings/backup_settings_page.dart | 64 +++--- lib/app/settings/export_page.dart | 233 +++++++++++---------- lib/i18n/strings_en.json | 9 +- lib/i18n/strings_es.json | 9 +- lib/i18n/translations.g.dart | 40 ++-- pubspec.yaml | 1 - 8 files changed, 175 insertions(+), 183 deletions(-) delete mode 100644 assets/icons/backup/db.svg delete mode 100644 assets/icons/backup/table_file.svg diff --git a/assets/icons/backup/db.svg b/assets/icons/backup/db.svg deleted file mode 100644 index 3afc3cbd..00000000 --- a/assets/icons/backup/db.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/assets/icons/backup/table_file.svg b/assets/icons/backup/table_file.svg deleted file mode 100644 index 3967a9ef..00000000 --- a/assets/icons/backup/table_file.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/lib/app/settings/backup_settings_page.dart b/lib/app/settings/backup_settings_page.dart index 221a6eba..c6d62a61 100644 --- a/lib/app/settings/backup_settings_page.dart +++ b/lib/app/settings/backup_settings_page.dart @@ -6,6 +6,7 @@ import 'package:intl/intl.dart'; import 'package:monekin/app/settings/settings.page.dart'; import 'package:monekin/core/database/app_db.dart'; import 'package:monekin/core/database/backup/backup_database_service.dart'; +import 'package:monekin/core/presentation/widgets/confirm_dialog.dart'; import 'package:monekin/core/routes/app_router.dart'; import 'package:monekin/core/utils/number_utils.dart'; import 'package:monekin/i18n/translations.g.dart'; @@ -31,46 +32,39 @@ class BackupSettingsPage extends StatelessWidget { subtitle: Text(t.backup.import.restore_backup_descr), minVerticalPadding: 16, onTap: () { - showDialog( - context: context, - builder: (context) => AlertDialog( - title: Text(t.general.attention), - content: Text(t.backup.import.restore_backup_warn), - actions: [ - TextButton( - onPressed: () { - BackupDatabaseService() - .importDatabase() - .then((value) { - if (!value) { - Navigator.pop(context); + confirmDialog(context, + icon: Icons.warning_rounded, + dialogTitle: t.backup.import.restore_backup_warn_title, + contentParagraphs: [ + Text(t.backup.import.restore_backup_warn_description) + ]).then((value) { + if (value == null || !value) { + return; + } - ScaffoldMessenger.of(context).showSnackBar( - SnackBar( - content: Text(t.backup.import.cancelled)), - ); + BackupDatabaseService().importDatabase().then((value) { + if (!value) { + Navigator.pop(context); - return; - } + ScaffoldMessenger.of(context).showSnackBar( + SnackBar(content: Text(t.backup.import.cancelled)), + ); - context.router - .replaceAll([const MainLayoutRoute()]); + return; + } + + context.router.replaceAll([const MainLayoutRoute()]); - ScaffoldMessenger.of(context).showSnackBar( - SnackBar( - content: Text(t.backup.import.success)), - ); - }).catchError((err) { - Navigator.pop(context); + ScaffoldMessenger.of(context).showSnackBar( + SnackBar(content: Text(t.backup.import.success)), + ); + }).catchError((err) { + Navigator.pop(context); - ScaffoldMessenger.of(context).showSnackBar( - SnackBar(content: Text(err.toString()))); - }); - }, - child: Text(t.general.confirm)) - ], - ), - ); + ScaffoldMessenger.of(context) + .showSnackBar(SnackBar(content: Text(err.toString()))); + }); + }); }, ), ListTile( diff --git a/lib/app/settings/export_page.dart b/lib/app/settings/export_page.dart index 620b5d42..f252dbb5 100644 --- a/lib/app/settings/export_page.dart +++ b/lib/app/settings/export_page.dart @@ -31,36 +31,31 @@ class _ExportDataPageState extends State { required _ExportFormats exportFormat, required String title, required String descr, - required String iconName, }) { final isSelected = selectedExportFormat == exportFormat; return Container( margin: const EdgeInsets.only(bottom: 12, left: 16, right: 16), - child: AnimatedOpacity( - duration: const Duration(milliseconds: 500), - opacity: isSelected ? 1 : 1, - child: OutlinedButtonStacked( - text: title, - filled: isSelected, - fontSize: 20, - alignLeft: true, - alignBeside: true, - padding: const EdgeInsets.all(10), - onTap: () { - selectedExportFormat = exportFormat; - - if (selectedExportFormat == _ExportFormats.db) { - filters = const TransactionFilters(); - } - - setState(() {}); - }, - iconData: exportFormat == _ExportFormats.csv - ? Icons.format_quote - : Icons.security, - afterWidget: Text(descr), - ), + child: OutlinedButtonStacked( + text: title, + filled: isSelected, + fontSize: 20, + alignLeft: true, + alignBeside: true, + padding: const EdgeInsets.all(10), + onTap: () { + selectedExportFormat = exportFormat; + + if (selectedExportFormat == _ExportFormats.db) { + filters = const TransactionFilters(); + } + + setState(() {}); + }, + iconData: exportFormat == _ExportFormats.csv + ? Icons.format_quote + : Icons.security, + afterWidget: Text(descr), ), ); } @@ -80,7 +75,7 @@ class _ExportDataPageState extends State { enabled: onClick != null, decoration: InputDecoration( labelText: title, - contentPadding: const EdgeInsets.only(left: 16, top: 16, bottom: 10), + contentPadding: const EdgeInsets.only(left: 6, top: 16, bottom: 10), suffixIcon: const Icon(Icons.arrow_drop_down), border: const UnderlineInputBorder(), )); @@ -118,7 +113,7 @@ class _ExportDataPageState extends State { .first) .then((value) { messeger.showSnackBar(SnackBar( - content: Text('Fichero descargado con exito en $value'), + content: Text(t.backup.export.success(x: value)), )); }).catchError((err) { messeger.showSnackBar(SnackBar( @@ -137,100 +132,112 @@ class _ExportDataPageState extends State { exportFormat: _ExportFormats.db, title: t.backup.export.all, descr: t.backup.export.all_descr, - iconName: 'db', ), cardSelector( exportFormat: _ExportFormats.csv, title: t.backup.export.transactions, descr: t.backup.export.transactions_descr, - iconName: 'table_file', ), const SizedBox(height: 8), - Padding( - padding: const EdgeInsets.only(left: 24), - child: Column( - crossAxisAlignment: CrossAxisAlignment.start, - children: [ - /* ---------------------------------- */ - /* -------- ACCOUNT SELECTOR -------- */ - /* ---------------------------------- */ - - StreamBuilder( - stream: AccountService.instance.getAccounts(), - builder: (context, snapshot) { - final selectedAccounts = (snapshot.data ?? []).where( - (element) => - filters.accountsIDs?.contains(element.id) ?? - false); - - return selector( - title: t.general.accounts, - inputValue: filters.accountsIDs == null || - (snapshot.hasData && - filters.accountsIDs!.length == - snapshot.data!.length) - ? t.account.select.all - : selectedAccounts - .map((e) => e.name) - .join(', '), - onClick: selectedExportFormat == _ExportFormats.db - ? null - : () async { - final modalRes = - await showAccountSelectorBottomSheet( - context, - AccountSelector( - allowMultiSelection: true, - filterSavingAccounts: false, - selectedAccounts: - selectedAccounts.toList(), - )); - - if (modalRes != null && - modalRes.isNotEmpty) { - setState(() { - filters = filters.copyWith( - accountsIDs: snapshot.hasData && - modalRes.length == - snapshot.data!.length - ? null - : modalRes.map((e) => e.id)); + IgnorePointer( + ignoring: selectedExportFormat == _ExportFormats.db, + child: AnimatedOpacity( + duration: const Duration(milliseconds: 400), + opacity: selectedExportFormat == _ExportFormats.db ? 0.3 : 1, + child: Padding( + padding: const EdgeInsets.only(left: 18), + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + /* ---------------------------------- */ + /* -------- ACCOUNT SELECTOR -------- */ + /* ---------------------------------- */ + + StreamBuilder( + stream: AccountService.instance.getAccounts(), + builder: (context, snapshot) { + final selectedAccounts = (snapshot.data ?? []) + .where((element) => + filters.accountsIDs + ?.contains(element.id) ?? + false); + + return selector( + title: t.general.accounts, + inputValue: filters.accountsIDs == null || + (snapshot.hasData && + filters.accountsIDs!.length == + snapshot.data!.length) + ? t.account.select.all + : selectedAccounts + .map((e) => e.name) + .join(', '), + onClick: selectedExportFormat == + _ExportFormats.db + ? null + : () async { + final modalRes = + await showAccountSelectorBottomSheet( + context, + AccountSelector( + allowMultiSelection: true, + filterSavingAccounts: false, + selectedAccounts: + selectedAccounts + .toList(), + )); + + if (modalRes != null && + modalRes.isNotEmpty) { + setState(() { + filters = filters.copyWith( + accountsIDs: snapshot + .hasData && + modalRes.length == + snapshot + .data!.length + ? null + : modalRes + .map((e) => e.id)); + }); + } }); - } - }); - }), - - /* ---------------------------------- */ - /* -------- CATEGORY SELECTOR ------- */ - /* ---------------------------------- */ - - const SizedBox(height: 16), - Text('${t.general.categories}:'), - const SizedBox(height: 6), - StreamBuilder( - stream: CategoryService.instance.getMainCategories(), - builder: (context, snapshot) { - return CategorySelector( - availableCategories: snapshot.data, - selectedCategories: filters.categories == null - ? null - : (snapshot.data ?? []) - .where( - (element) => filters.categories! - .contains(element.id), - ) - .toList(), - onChange: (selection) { - setState(() { - filters = filters.copyWith( - categories: - selection?.map((e) => e.id).toList(), - ); - }); - }, - ); - }), - ], + }), + + /* ---------------------------------- */ + /* -------- CATEGORY SELECTOR ------- */ + /* ---------------------------------- */ + + const SizedBox(height: 16), + Text('${t.general.categories}:'), + const SizedBox(height: 6), + StreamBuilder( + stream: + CategoryService.instance.getMainCategories(), + builder: (context, snapshot) { + return CategorySelector( + availableCategories: snapshot.data, + selectedCategories: filters.categories == null + ? null + : (snapshot.data ?? []) + .where( + (element) => filters.categories! + .contains(element.id), + ) + .toList(), + onChange: (selection) { + setState(() { + filters = filters.copyWith( + categories: + selection?.map((e) => e.id).toList(), + ); + }); + }, + ); + }), + ], + ), + ), ), ) ], diff --git a/lib/i18n/strings_en.json b/lib/i18n/strings_en.json index d2b4c299..c1aa3b46 100644 --- a/lib/i18n/strings_en.json +++ b/lib/i18n/strings_en.json @@ -4,7 +4,6 @@ "or": "or", "understood": "Understood", "unspecified": "Unspecified", - "attention": "Attention ⚠️", "confirm": "Confirm", "continue_text": "Continue", "quick_actions": "Quick actions", @@ -543,19 +542,19 @@ "all": "Full backup", "all.descr": "Export all your data (accounts, transactions, budgets, settings...). Import them again at any time so you don't lose anything.", "transactions": "Transactions backup", - "transactions.descr": "Export your transactions in various formats so you can more easily analyze them in other programs or applications.", + "transactions.descr": "Export your transactions in CSV so you can more easily analyze them in other programs or applications.", "description": "Download your data in different formats", "dialog_title": "Save/Send file", - "success_in_documents": "File successfully saved to Internal Storage/Documents", - "success_in_data": "File saved/downloaded successfully", + "success": "File saved/downloaded successfully in {{x}}", "error": "Error downloading the file. Please contact the developer via lozin.technologies@gmail.com" }, "IMPORT": { "title": "Import your data", "title.short": "Import", "restore-backup": "Restore Backup", - "restore-backup-warn": "When importing a new database, you will lose all data currently saved in the app. It is recommended to make a backup before continuing. Do not upload here any file whose origin you do not know, upload only files that you have previously downloaded from Monekin", "restore-backup-descr": "Import a previously saved database from Monekin. This action will replace any current application data with the new data", + "restore-backup-warn.description": "When importing a new database, you will lose all data currently saved in the app. It is recommended to make a backup before continuing. Do not upload here any file whose origin you do not know, upload only files that you have previously downloaded from Monekin", + "restore-backup-warn.title": "Overwrite all data", "select-other-file": "Select other file", "tap-to-select-file": "Tap to select a file", "MANUAL-IMPORT": { diff --git a/lib/i18n/strings_es.json b/lib/i18n/strings_es.json index dfc68a6d..499fc6cd 100644 --- a/lib/i18n/strings_es.json +++ b/lib/i18n/strings_es.json @@ -4,7 +4,6 @@ "or": "o", "understood": "Entendido", "unspecified": "Sin especificar", - "attention": "Atención ⚠️", "confirm": "Confirmar", "continue_text": "Continuar", "quick_actions": "Acciones rápidas", @@ -547,19 +546,19 @@ "all": "Respaldo total", "all.descr": "Exporta todos tus datos (cuentas, transacciones, presupuestos, ajustes...). Importalos de nuevo en cualquier momento para no perder nada.", "transactions": "Respaldo de transacciones", - "transactions.descr": "Exporta tus transacciones en diversos formatos para que puedas analizarlas mas facilmente en otros programas o aplicaciones.", + "transactions.descr": "Exporta tus transacciones en CSV para que puedas analizarlas mas facilmente en otros programas o aplicaciones.", "description": "Exporta tus datos en diferentes formatos", "dialog_title": "Guardar/Enviar archivo", - "success_in_documents": "Archivo guardado correctamente en Almacenamiento interno/Documents", - "success_in_data": "Archivo guardado/enviado correctamente", + "success": "Archivo guardado/enviado correctamente en {{x}}", "error": "Error al descargar el archivo. Por favor contacte con el desarrollador via lozin.technologies@gmail.com" }, "IMPORT": { "title": "Importar tus datos", "title.short": "Importar", "restore-backup": "Restaurar copia de seguridad", - "restore-backup-warn": "Al importar una nueva base de datos, perderas toda la información actualmente guardada en la app. Se recomienda hacer una copia de seguridad antes de continuar. No subas aquí ningún fichero cuyo origen no conozcas, sube solo ficheros que hayas descargado previamente desde Monekin", "restore-backup-descr": "Importa una base de datos anteriormente guardada desde Monekin. Esta acción remplazará cualquier dato actual de la aplicación por los nuevos datos", + "restore-backup-warn.title": "Sobreescribir todos los datos", + "restore-backup-warn.description": "Al importar una nueva base de datos, perderas toda la información actualmente guardada en la app. Se recomienda hacer una copia de seguridad antes de continuar. No subas aquí ningún fichero cuyo origen no conozcas, sube solo ficheros que hayas descargado previamente desde Monekin", "tap-to-select-file": "Pulsa para seleccionar un archivo", "select-other-file": "Selecciona otro fichero", "MANUAL-IMPORT": { diff --git a/lib/i18n/translations.g.dart b/lib/i18n/translations.g.dart index b7dc52e5..1a17a2cc 100644 --- a/lib/i18n/translations.g.dart +++ b/lib/i18n/translations.g.dart @@ -4,9 +4,9 @@ /// To regenerate, run: `dart run slang` /// /// Locales: 2 -/// Strings: 1028 (514 per locale) +/// Strings: 1026 (513 per locale) /// -/// Built on 2024-02-05 at 12:59 UTC +/// Built on 2024-02-06 at 18:53 UTC // coverage:ignore-file // ignore_for_file: type=lint @@ -187,7 +187,6 @@ class _TranslationsGeneralEn { String get or => 'or'; String get understood => 'Understood'; String get unspecified => 'Unspecified'; - String get attention => 'Attention ⚠️'; String get confirm => 'Confirm'; String get continue_text => 'Continue'; String get quick_actions => 'Quick actions'; @@ -1023,11 +1022,10 @@ class _TranslationsBackupExportEn { String get all => 'Full backup'; String get all_descr => 'Export all your data (accounts, transactions, budgets, settings...). Import them again at any time so you don\'t lose anything.'; String get transactions => 'Transactions backup'; - String get transactions_descr => 'Export your transactions in various formats so you can more easily analyze them in other programs or applications.'; + String get transactions_descr => 'Export your transactions in CSV so you can more easily analyze them in other programs or applications.'; String get description => 'Download your data in different formats'; String get dialog_title => 'Save/Send file'; - String get success_in_documents => 'File successfully saved to Internal Storage/Documents'; - String get success_in_data => 'File saved/downloaded successfully'; + String success({required Object x}) => 'File saved/downloaded successfully in ${x}'; String get error => 'Error downloading the file. Please contact the developer via lozin.technologies@gmail.com'; } @@ -1041,8 +1039,9 @@ class _TranslationsBackupImportEn { String get title => 'Import your data'; String get title_short => 'Import'; String get restore_backup => 'Restore Backup'; - String get restore_backup_warn => 'When importing a new database, you will lose all data currently saved in the app. It is recommended to make a backup before continuing. Do not upload here any file whose origin you do not know, upload only files that you have previously downloaded from Monekin'; String get restore_backup_descr => 'Import a previously saved database from Monekin. This action will replace any current application data with the new data'; + String get restore_backup_warn_description => 'When importing a new database, you will lose all data currently saved in the app. It is recommended to make a backup before continuing. Do not upload here any file whose origin you do not know, upload only files that you have previously downloaded from Monekin'; + String get restore_backup_warn_title => 'Overwrite all data'; String get select_other_file => 'Select other file'; String get tap_to_select_file => 'Tap to select a file'; late final _TranslationsBackupImportManualImportEn manual_import = _TranslationsBackupImportManualImportEn._(_root); @@ -1421,7 +1420,6 @@ class _TranslationsGeneralEs implements _TranslationsGeneralEn { @override String get or => 'o'; @override String get understood => 'Entendido'; @override String get unspecified => 'Sin especificar'; - @override String get attention => 'Atención ⚠️'; @override String get confirm => 'Confirmar'; @override String get continue_text => 'Continuar'; @override String get quick_actions => 'Acciones rápidas'; @@ -2257,11 +2255,10 @@ class _TranslationsBackupExportEs implements _TranslationsBackupExportEn { @override String get all => 'Respaldo total'; @override String get all_descr => 'Exporta todos tus datos (cuentas, transacciones, presupuestos, ajustes...). Importalos de nuevo en cualquier momento para no perder nada.'; @override String get transactions => 'Respaldo de transacciones'; - @override String get transactions_descr => 'Exporta tus transacciones en diversos formatos para que puedas analizarlas mas facilmente en otros programas o aplicaciones.'; + @override String get transactions_descr => 'Exporta tus transacciones en CSV para que puedas analizarlas mas facilmente en otros programas o aplicaciones.'; @override String get description => 'Exporta tus datos en diferentes formatos'; @override String get dialog_title => 'Guardar/Enviar archivo'; - @override String get success_in_documents => 'Archivo guardado correctamente en Almacenamiento interno/Documents'; - @override String get success_in_data => 'Archivo guardado/enviado correctamente'; + @override String success({required Object x}) => 'Archivo guardado/enviado correctamente en ${x}'; @override String get error => 'Error al descargar el archivo. Por favor contacte con el desarrollador via lozin.technologies@gmail.com'; } @@ -2275,8 +2272,9 @@ class _TranslationsBackupImportEs implements _TranslationsBackupImportEn { @override String get title => 'Importar tus datos'; @override String get title_short => 'Importar'; @override String get restore_backup => 'Restaurar copia de seguridad'; - @override String get restore_backup_warn => 'Al importar una nueva base de datos, perderas toda la información actualmente guardada en la app. Se recomienda hacer una copia de seguridad antes de continuar. No subas aquí ningún fichero cuyo origen no conozcas, sube solo ficheros que hayas descargado previamente desde Monekin'; @override String get restore_backup_descr => 'Importa una base de datos anteriormente guardada desde Monekin. Esta acción remplazará cualquier dato actual de la aplicación por los nuevos datos'; + @override String get restore_backup_warn_title => 'Sobreescribir todos los datos'; + @override String get restore_backup_warn_description => 'Al importar una nueva base de datos, perderas toda la información actualmente guardada en la app. Se recomienda hacer una copia de seguridad antes de continuar. No subas aquí ningún fichero cuyo origen no conozcas, sube solo ficheros que hayas descargado previamente desde Monekin'; @override String get tap_to_select_file => 'Pulsa para seleccionar un archivo'; @override String get select_other_file => 'Selecciona otro fichero'; @override late final _TranslationsBackupImportManualImportEs manual_import = _TranslationsBackupImportManualImportEs._(_root); @@ -2612,7 +2610,6 @@ extension on _TranslationsEn { case 'general.or': return 'or'; case 'general.understood': return 'Understood'; case 'general.unspecified': return 'Unspecified'; - case 'general.attention': return 'Attention ⚠️'; case 'general.confirm': return 'Confirm'; case 'general.continue_text': return 'Continue'; case 'general.quick_actions': return 'Quick actions'; @@ -3091,17 +3088,17 @@ extension on _TranslationsEn { case 'backup.export.all': return 'Full backup'; case 'backup.export.all_descr': return 'Export all your data (accounts, transactions, budgets, settings...). Import them again at any time so you don\'t lose anything.'; case 'backup.export.transactions': return 'Transactions backup'; - case 'backup.export.transactions_descr': return 'Export your transactions in various formats so you can more easily analyze them in other programs or applications.'; + case 'backup.export.transactions_descr': return 'Export your transactions in CSV so you can more easily analyze them in other programs or applications.'; case 'backup.export.description': return 'Download your data in different formats'; case 'backup.export.dialog_title': return 'Save/Send file'; - case 'backup.export.success_in_documents': return 'File successfully saved to Internal Storage/Documents'; - case 'backup.export.success_in_data': return 'File saved/downloaded successfully'; + case 'backup.export.success': return ({required Object x}) => 'File saved/downloaded successfully in ${x}'; case 'backup.export.error': return 'Error downloading the file. Please contact the developer via lozin.technologies@gmail.com'; case 'backup.import.title': return 'Import your data'; case 'backup.import.title_short': return 'Import'; case 'backup.import.restore_backup': return 'Restore Backup'; - case 'backup.import.restore_backup_warn': return 'When importing a new database, you will lose all data currently saved in the app. It is recommended to make a backup before continuing. Do not upload here any file whose origin you do not know, upload only files that you have previously downloaded from Monekin'; case 'backup.import.restore_backup_descr': return 'Import a previously saved database from Monekin. This action will replace any current application data with the new data'; + case 'backup.import.restore_backup_warn_description': return 'When importing a new database, you will lose all data currently saved in the app. It is recommended to make a backup before continuing. Do not upload here any file whose origin you do not know, upload only files that you have previously downloaded from Monekin'; + case 'backup.import.restore_backup_warn_title': return 'Overwrite all data'; case 'backup.import.select_other_file': return 'Select other file'; case 'backup.import.tap_to_select_file': return 'Tap to select a file'; case 'backup.import.manual_import.title': return 'Manual import'; @@ -3203,7 +3200,6 @@ extension on _TranslationsEs { case 'general.or': return 'o'; case 'general.understood': return 'Entendido'; case 'general.unspecified': return 'Sin especificar'; - case 'general.attention': return 'Atención ⚠️'; case 'general.confirm': return 'Confirmar'; case 'general.continue_text': return 'Continuar'; case 'general.quick_actions': return 'Acciones rápidas'; @@ -3683,17 +3679,17 @@ extension on _TranslationsEs { case 'backup.export.all': return 'Respaldo total'; case 'backup.export.all_descr': return 'Exporta todos tus datos (cuentas, transacciones, presupuestos, ajustes...). Importalos de nuevo en cualquier momento para no perder nada.'; case 'backup.export.transactions': return 'Respaldo de transacciones'; - case 'backup.export.transactions_descr': return 'Exporta tus transacciones en diversos formatos para que puedas analizarlas mas facilmente en otros programas o aplicaciones.'; + case 'backup.export.transactions_descr': return 'Exporta tus transacciones en CSV para que puedas analizarlas mas facilmente en otros programas o aplicaciones.'; case 'backup.export.description': return 'Exporta tus datos en diferentes formatos'; case 'backup.export.dialog_title': return 'Guardar/Enviar archivo'; - case 'backup.export.success_in_documents': return 'Archivo guardado correctamente en Almacenamiento interno/Documents'; - case 'backup.export.success_in_data': return 'Archivo guardado/enviado correctamente'; + case 'backup.export.success': return ({required Object x}) => 'Archivo guardado/enviado correctamente en ${x}'; case 'backup.export.error': return 'Error al descargar el archivo. Por favor contacte con el desarrollador via lozin.technologies@gmail.com'; case 'backup.import.title': return 'Importar tus datos'; case 'backup.import.title_short': return 'Importar'; case 'backup.import.restore_backup': return 'Restaurar copia de seguridad'; - case 'backup.import.restore_backup_warn': return 'Al importar una nueva base de datos, perderas toda la información actualmente guardada en la app. Se recomienda hacer una copia de seguridad antes de continuar. No subas aquí ningún fichero cuyo origen no conozcas, sube solo ficheros que hayas descargado previamente desde Monekin'; case 'backup.import.restore_backup_descr': return 'Importa una base de datos anteriormente guardada desde Monekin. Esta acción remplazará cualquier dato actual de la aplicación por los nuevos datos'; + case 'backup.import.restore_backup_warn_title': return 'Sobreescribir todos los datos'; + case 'backup.import.restore_backup_warn_description': return 'Al importar una nueva base de datos, perderas toda la información actualmente guardada en la app. Se recomienda hacer una copia de seguridad antes de continuar. No subas aquí ningún fichero cuyo origen no conozcas, sube solo ficheros que hayas descargado previamente desde Monekin'; case 'backup.import.tap_to_select_file': return 'Pulsa para seleccionar un archivo'; case 'backup.import.select_other_file': return 'Selecciona otro fichero'; case 'backup.import.manual_import.title': return 'Importación manual'; diff --git a/pubspec.yaml b/pubspec.yaml index 5ec5d538..aaab2881 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -108,7 +108,6 @@ flutter: - assets/icons/supported_selectable_icons/logos/financial_institutions/ - assets/sql/ - assets/sql/migrations/ - - assets/icons/backup/ fonts: - family: Nunito