Initial commit

This commit is contained in:
Super User
2026-06-14 15:03:29 -04:00
commit 9ac9e9e953
46 changed files with 2655 additions and 0 deletions

View File

@@ -0,0 +1,93 @@
import 'package:flutter/material.dart';
import 'package:provider/provider.dart';
import '../models/configuracion.dart';
import '../providers/configuracion_provider.dart';
class ConfiguracionScreen extends StatefulWidget {
const ConfiguracionScreen({super.key});
@override
State<ConfiguracionScreen> createState() => _ConfiguracionScreenState();
}
class _ConfiguracionScreenState extends State<ConfiguracionScreen> {
late List<bool> _diasSeleccionados;
late String _moneda;
final List<Map<String, dynamic>> _opcionesDias = [
{'label': '7 días antes', 'value': 7},
{'label': '3 días antes', 'value': 3},
{'label': '1 día antes', 'value': 1},
{'label': 'Día de vencimiento', 'value': 0},
];
final List<String> _monedas = ['USD', 'EUR', 'MXN', 'COP', 'ARS', 'PEN', 'CLP', 'BRL'];
@override
void initState() {
super.initState();
final config = context.read<ConfiguracionProvider>().config;
final dias = config?.diasRecordatorio ?? '7,3,1,0';
final lista = dias.split(',').map((e) => int.tryParse(e.trim()) ?? 0).toList();
_diasSeleccionados = _opcionesDias.map((o) => lista.contains(o['value'])).toList();
_moneda = config?.moneda ?? 'USD';
}
@override
Widget build(BuildContext context) {
final provider = context.read<ConfiguracionProvider>();
return Scaffold(
appBar: AppBar(title: const Text('Configuración')),
body: ListView(
padding: const EdgeInsets.all(16),
children: [
Text('Recordatorios', style: Theme.of(context).textTheme.titleMedium),
const SizedBox(height: 8),
...List.generate(_opcionesDias.length, (i) {
return CheckboxListTile(
title: Text(_opcionesDias[i]['label'] as String),
value: _diasSeleccionados[i],
onChanged: (v) {
setState(() => _diasSeleccionados[i] = v ?? false);
},
);
}),
const SizedBox(height: 20),
Text('Moneda', style: Theme.of(context).textTheme.titleMedium),
const SizedBox(height: 8),
DropdownButtonFormField<String>(
value: _moneda,
decoration: const InputDecoration(border: OutlineInputBorder()),
items: _monedas.map((m) => DropdownMenuItem(value: m, child: Text(m))).toList(),
onChanged: (v) => setState(() => _moneda = v!),
),
const SizedBox(height: 32),
FilledButton(
onPressed: () async {
final diasStr = _opcionesDias
.asMap()
.entries
.where((e) => _diasSeleccionados[e.key])
.map((e) => e.value['value'].toString())
.join(',');
final config = Configuracion(
id: provider.config?.id,
diasRecordatorio: diasStr.isEmpty ? '0' : diasStr,
tema: provider.config?.tema ?? 'claro',
moneda: _moneda,
);
await provider.guardarConfiguracion(config);
if (context.mounted) {
ScaffoldMessenger.of(context).showSnackBar(
const SnackBar(content: Text('Configuración guardada')),
);
}
},
child: const Text('Guardar configuración'),
),
],
),
);
}
}