Files
mobile/lib/core/widgets/wallet_chip.dart

75 lines
2.3 KiB
Dart

import 'package:flutter/material.dart';
import 'package:flutter_riverpod/flutter_riverpod.dart';
import 'package:go_router/go_router.dart';
import 'package:intl/intl.dart';
import '../router/app_router.dart';
import '../theme/app_colors.dart';
import '../../features/wallet/data/wallet_repository.dart';
/// Solde portefeuille compact — toujours visible (comme WashOnline).
class WalletChip extends ConsumerWidget {
const WalletChip({super.key});
@override
Widget build(BuildContext context, WidgetRef ref) {
final walletAsync = ref.watch(walletProvider);
final format = NumberFormat.currency(locale: 'fr_FR', symbol: '€', decimalDigits: 2);
return walletAsync.when(
loading: () => const Padding(
padding: EdgeInsets.only(right: 12),
child: SizedBox(width: 18, height: 18, child: CircularProgressIndicator(strokeWidth: 2)),
),
error: (_, __) => _ChipButton(
label: '— €',
onTap: () => context.go(AppRoutes.wallet),
),
data: (wallet) => _ChipButton(
label: format.format(wallet.currentBalance),
onTap: () => context.go(AppRoutes.wallet),
),
);
}
}
class _ChipButton extends StatelessWidget {
const _ChipButton({required this.label, required this.onTap});
final String label;
final VoidCallback onTap;
@override
Widget build(BuildContext context) {
return Padding(
padding: const EdgeInsets.only(right: 8),
child: Material(
color: AppColors.primary.withValues(alpha: 0.1),
borderRadius: BorderRadius.circular(20),
child: InkWell(
onTap: onTap,
borderRadius: BorderRadius.circular(20),
child: Padding(
padding: const EdgeInsets.symmetric(horizontal: 12, vertical: 6),
child: Row(
mainAxisSize: MainAxisSize.min,
children: [
const Icon(Icons.account_balance_wallet_outlined, size: 16, color: AppColors.primary),
const SizedBox(width: 6),
Text(
label,
style: const TextStyle(
color: AppColors.primary,
fontWeight: FontWeight.w700,
fontSize: 13,
),
),
],
),
),
),
),
);
}
}