Add saved payout destination UX and service contracts (#54)

This commit is contained in:
Stephan D committed 2026-10-16 12:01:33 +02:00
1 parent a5689876ff
commit 24af794112
49 files changed
+4687 -62

No files matched your search

@@ -0,0 +1,65 @@
import 'package:flutter/foundation.dart';
import 'models.dart';
import 'service.dart';
class DestinationsProvider extends ChangeNotifier {
DestinationsProvider(this.service);
final DestinationService service;
DestinationCapabilities? capabilities;
List<SavedDestination> methods = [];
bool loading = false, failed = false, _disposed = false;
int _revision = 0;
Future<void> refresh() async {
final revision = ++_revision;
loading = true;
failed = false;
notifyListeners();
try {
final caps = await service.capabilities();
final rows = await service.list();
if (_disposed || revision != _revision) return;
capabilities = caps;
methods = rows;
} catch (_) {
if (_disposed || revision != _revision) return;
failed = true;
}
if (_disposed) return;
loading = false;
notifyListeners();
}
List<SavedDestination> search(String query, DestinationType type) {
final q = query.trim().toLowerCase();
final rows = methods
.where(
(d) =>
d.details.type == type &&
'${d.label} ${d.details.display}'.toLowerCase().contains(q),
)
.toList();
rows.sort(
(a, b) => (b.lastUsed ?? DateTime(1970)).compareTo(
a.lastUsed ?? DateTime(1970),
),
);
return rows;
}
void reset() {
_revision++;
methods = [];
capabilities = null;
loading = failed = false;
service.clearTransient();
notifyListeners();
}
@override
void dispose() {
_disposed = true;
_revision++;
super.dispose();
}
}