import 'dart:async'; import 'package:flutter/foundation.dart'; import 'package:pshared/models/payment/operation.dart'; import 'package:pshared/provider/payment/payments.dart'; import 'package:pweb/utils/report/operations.dart'; import 'package:pweb/utils/report/payment_mapper.dart'; class RecentPaymentsController extends ChangeNotifier { PaymentsProvider? _payments; List _recent = const []; List get recentOperations => _recent; bool get isLoading => _payments?.isLoading ?? false; Exception? get error => _payments?.error; void update(PaymentsProvider provider) { if (!identical(_payments, provider)) { _payments?.endAutoRefresh(); _payments = provider; _payments?.beginAutoRefresh(); if (provider.isReady || provider.isLoading) { unawaited(_payments?.refreshSilently()); } else { unawaited(_payments?.refresh()); } } _rebuild(); } void _rebuild() { final operations = (_payments?.payments ?? const []) .map(mapPaymentToOperation) .toList(); _recent = sortOperations(operations).take(5).toList(); notifyListeners(); } @override void dispose() { _payments?.endAutoRefresh(); super.dispose(); } }