Facturas recurrentes, edición, padding, y política de privacidad

- Servicio: nuevo campo esRecurrente + migración DB v2
- Al marcar pagada una factura recurrente se genera la siguiente
- Editar facturas existentes desde CrearFacturaScreen
- Nuevo método actualizarFactura en FacturaProvider
- padding inferior en listas de facturas y servicios (último item visible)
- Nota de factura visible en subtítulo
- Filtro Vencidas corregido
- Monto pendiente total visible en dashboard
- Botón undo para revertir factura pagada
- Configuración de release signing (keystore)
- Pantalla de política de privacidad en la app + PRIVACY_POLICY.md
This commit is contained in:
Super User
2026-06-15 21:45:59 -04:00
parent be28ef39cd
commit bbd20f66da
12 changed files with 260 additions and 16 deletions

View File

@@ -3,6 +3,7 @@ import 'package:provider/provider.dart';
import '../models/configuracion.dart';
import '../providers/configuracion_provider.dart';
import '../utils/currency_utils.dart';
import 'privacy_policy_screen.dart';
class ConfiguracionScreen extends StatefulWidget {
const ConfiguracionScreen({super.key});
@@ -64,7 +65,15 @@ class _ConfiguracionScreenState extends State<ConfiguracionScreen> {
onChanged: (v) => setState(() => _moneda = v!),
),
const SizedBox(height: 32),
FilledButton(
const SizedBox(height: 16),
ListTile(
leading: const Icon(Icons.privacy_tip_outlined),
title: const Text('Política de privacidad'),
trailing: const Icon(Icons.chevron_right),
onTap: () => Navigator.push(context, MaterialPageRoute(builder: (_) => const PrivacyPolicyScreen())),
),
const SizedBox(height: 16),
FilledButton(
onPressed: () async {
final diasStr = _opcionesDias
.asMap()