import 'package:flutter/material.dart'; import 'package:flutter_secure_storage/flutter_secure_storage.dart'; import '../../domain/entities/devise.dart'; const _kDevisePrefereeKey = 'unionflow.devise.preferee'; /// Widget de sélection de la devise préférée (persistée en secure storage). /// /// Utilisé sur la page Profil/Paramètres. Notifie via [onChanged] avec la /// nouvelle devise quand l'utilisateur fait un choix. class DeviseSelector extends StatefulWidget { final Devise? initial; final ValueChanged? onChanged; const DeviseSelector({super.key, this.initial, this.onChanged}); /// Lit la devise préférée du secure storage. Fallback sur XOF. static Future readPreferred(FlutterSecureStorage storage) async { try { final v = await storage.read(key: _kDevisePrefereeKey); return Devise.fromCode(v); } catch (_) { return Devise.reference(); } } /// Persiste la devise préférée. static Future writePreferred( FlutterSecureStorage storage, Devise devise) async { await storage.write(key: _kDevisePrefereeKey, value: devise.code); } @override State createState() => _DeviseSelectorState(); } class _DeviseSelectorState extends State { late Devise _selected; @override void initState() { super.initState(); _selected = widget.initial ?? Devise.reference(); } @override Widget build(BuildContext context) { return DropdownButtonFormField( value: _selected, decoration: const InputDecoration( labelText: 'Devise préférée', border: OutlineInputBorder(), prefixIcon: Icon(Icons.account_balance_wallet_outlined), ), items: Devise.values .map( (d) => DropdownMenuItem( value: d, child: Text('${d.code} — ${d.libelle}'), ), ) .toList(), onChanged: (d) { if (d == null) return; setState(() => _selected = d); widget.onChanged?.call(d); }, ); } }