Initial commit
This commit is contained in:
93
lib/screens/configuracion_screen.dart
Normal file
93
lib/screens/configuracion_screen.dart
Normal 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'),
|
||||
),
|
||||
],
|
||||
),
|
||||
);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user