| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107 |
- import 'package:flutter/material.dart';
- import 'package:flutter_riverpod/flutter_riverpod.dart';
- import 'package:intl/intl.dart';
- import 'package:ristoris/core/utils.dart';
- import '../../../providers/auth_provider.dart';
- import '../../../providers/database_provider.dart';
- import '../../../database/database.dart';
- import '../../widgets/empty_state.dart';
- final paymentsProvider =
- FutureProvider.family<List<VScadenzeData>, int>((ref, idAgente) {
- return ref.read(scadenzeDaoProvider).getScadenzePerAgente(idAgente);
- });
- class PaymentsPage extends ConsumerWidget {
- const PaymentsPage({super.key});
- @override
- Widget build(BuildContext context, WidgetRef ref) {
- final agente = ref.watch(authProvider).agente;
- final paysAsync =
- agente != null ? ref.watch(paymentsProvider(agente.idAgente)) : null;
- return Scaffold(
- appBar: AppBar(title: const Text('Scadenze')),
- body: SafeArea(
- child: paysAsync?.when(
- data: (pays) {
- if (pays.isEmpty)
- return const EmptyState(
- icon: Icons.account_balance_wallet_outlined,
- title: 'Nessuna scadenza');
- return ListView.builder(
- itemCount: pays.length,
- itemBuilder: (_, i) => _ScadenzaCard(scadenza: pays[i]),
- );
- },
- loading: () => const Center(child: CircularProgressIndicator()),
- error: (e, _) => Center(child: Text('Errore: $e')),
- ) ??
- const Center(child: CircularProgressIndicator()),
- ),
- );
- }
- }
- class _ScadenzaCard extends StatelessWidget {
- final VScadenzeData scadenza;
- const _ScadenzaCard({required this.scadenza});
- @override
- Widget build(BuildContext context) {
- final theme = Theme.of(context);
- final importo = scadenza.importoScadenza ?? 0;
- final scaduta = scadenza.dataScadenza != null &&
- DateTime.parse(scadenza.dataScadenza!).isBefore(DateTime.now());
- return Card(
- margin: const EdgeInsets.symmetric(horizontal: 12, vertical: 3),
- color: scaduta ? Colors.red.shade50 : null,
- child: ListTile(
- leading: CircleAvatar(
- backgroundColor: scaduta
- ? Colors.red.shade100
- : theme.colorScheme.primaryContainer,
- child: Icon(Icons.account_balance_wallet_outlined,
- color: scaduta ? Colors.red : theme.colorScheme.primary),
- ),
- title: Text('Documento ${scadenza.numPartita ?? ""}'),
- subtitle: Column(
- crossAxisAlignment: CrossAxisAlignment.start,
- children: [
- if (scadenza.ragioneSociale != null)
- Text(
- scadenza.ragioneSociale!,
- style: theme.textTheme.bodyMedium
- ?.copyWith(fontWeight: FontWeight.w500),
- ),
- if (scadenza.codCliente != null)
- Text('Cod. ${scadenza.codCliente}',
- style: theme.textTheme.bodySmall),
- Text('Scadenza: ${Utils.formatDate(scadenza.dataScadenza)}'),
- ],
- ),
- trailing: Column(
- mainAxisSize: MainAxisSize.min,
- crossAxisAlignment: CrossAxisAlignment.end,
- children: [
- Text(
- NumberFormat.currency(locale: 'it', symbol: '€')
- .format(importo),
- style: theme.textTheme.titleSmall
- ?.copyWith(fontWeight: FontWeight.bold)),
- if (scaduta)
- Container(
- padding: const EdgeInsets.symmetric(horizontal: 6, vertical: 1),
- decoration: BoxDecoration(
- color: Colors.red, borderRadius: BorderRadius.circular(8)),
- child: const Text('SCADUTA',
- style: TextStyle(color: Colors.white, fontSize: 10)),
- ),
- ],
- ),
- ),
- );
- }
- }
|