Add saved payout destination UX and service contracts (#54)
This commit is contained in:
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();
|
||||
}
|
||||
}
|
||||
Reference in new issue
Block a user