Files
app_fideliter/lib/services/reglages.dart
T
Mathew 1d3ee69c6d Initial commit — app fidélité magasin (tablette)
App Flutter de programme de fidélité : login staff, clients (nom/prénom),
scan QR, factures (€→points), récompenses, réglages. Backend Supabase
(schéma SQL + RLS anti-triche dans supabase/). Icône incluse.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-17 21:37:06 +02:00

57 lines
1.8 KiB
Dart

import 'package:flutter/foundation.dart';
import '../config.dart';
import '../supabase_config.dart';
/// Réglages globaux du magasin (ligne unique `reglages` id=1 sur Supabase).
/// Étend [ChangeNotifier] pour que les écrans se rafraîchissent au changement.
class Reglages extends ChangeNotifier {
Reglages._();
static final Reglages instance = Reglages._();
double _eurosParPoint = Config.eurosParPointParDefaut;
String _nomMagasin = '';
/// Nombre d'euros à dépenser pour gagner 1 point.
double get eurosParPoint => _eurosParPoint;
/// Nom du magasin, affiché sur la carte / le QR du client.
String get nomMagasin => _nomMagasin;
Future<void> charger() async {
try {
final row = await supabase
.from('reglages')
.select('euros_par_point, nom_magasin')
.eq('id', 1)
.maybeSingle();
if (row != null) {
_eurosParPoint = (row['euros_par_point'] as num?)?.toDouble() ??
Config.eurosParPointParDefaut;
_nomMagasin = (row['nom_magasin'] as String?) ?? '';
notifyListeners();
}
} catch (_) {
// Réglages par défaut si non connecté / hors-ligne.
}
}
/// Points gagnés pour un montant donné, selon le ratio courant.
double pointsPour(double euros) =>
_eurosParPoint > 0 ? euros / _eurosParPoint : 0;
Future<void> definirEurosParPoint(double valeur) async {
if (valeur <= 0) return;
await supabase.from('reglages').update({'euros_par_point': valeur}).eq('id', 1);
_eurosParPoint = valeur;
notifyListeners();
}
Future<void> definirNomMagasin(String valeur) async {
final v = valeur.trim();
await supabase.from('reglages').update({'nom_magasin': v}).eq('id', 1);
_nomMagasin = v;
notifyListeners();
}
}