redesigned payment page + a lot of fixes

This commit is contained in:
Arseni
2026-02-21 21:55:20 +03:00
parent a68aa2abff
commit 0c6fa03aba
208 changed files with 4062 additions and 2217 deletions

View File

@@ -13,9 +13,11 @@ import 'package:pshared/models/asset.dart';
import 'package:pshared/models/payment/intent.dart';
import 'package:pshared/models/payment/quote/quote.dart';
import 'package:pshared/models/money.dart';
import 'package:pshared/models/auto_refresh_mode.dart';
import 'package:pshared/provider/organizations.dart';
import 'package:pshared/provider/payment/amount.dart';
import 'package:pshared/provider/payment/flow.dart';
import 'package:pshared/provider/payment/auto_refresh.dart';
import 'package:pshared/provider/recipient/provider.dart';
import 'package:pshared/provider/recipient/pmethods.dart';
import 'package:pshared/provider/resource.dart';
@@ -31,6 +33,8 @@ class QuotationProvider extends ChangeNotifier {
bool _isLoaded = false;
PaymentIntent? _lastIntent;
final QuotationIntentBuilder _intentBuilder = QuotationIntentBuilder();
final AutoRefreshScheduler _autoRefresh = AutoRefreshScheduler();
AutoRefreshMode _autoRefreshMode = AutoRefreshMode.on;
void update(
OrganizationsProvider venue,
@@ -59,6 +63,7 @@ class QuotationProvider extends ChangeNotifier {
Exception? get error => _quotation.error;
bool get canRefresh => _lastIntent != null;
bool get isReady => _isLoaded && !_quotation.isLoading && _quotation.error == null;
AutoRefreshMode get autoRefreshMode => _autoRefreshMode;
DateTime? get quoteExpiresAt {
final expiresAtUnixMs = quotation?.fxQuote?.expiresAtUnixMs;
@@ -78,6 +83,14 @@ class QuotationProvider extends ChangeNotifier {
void _setResource(Resource<PaymentQuote> quotation) {
_quotation = quotation;
_syncAutoRefresh();
notifyListeners();
}
void setAutoRefreshMode(AutoRefreshMode mode) {
if (_autoRefreshMode == mode) return;
_autoRefreshMode = mode;
_syncAutoRefresh();
notifyListeners();
}
@@ -122,4 +135,24 @@ class QuotationProvider extends ChangeNotifier {
final payload = jsonEncode(intent.toDTO().toJson());
return Uuid().v5(Namespace.url.value, 'quote:$payload');
}
void _syncAutoRefresh() {
final isEnabled = _autoRefreshMode == AutoRefreshMode.on;
_autoRefresh.setEnabled(isEnabled);
final canAutoRefresh = isEnabled && canRefresh;
_autoRefresh.sync(
isLoading: isLoading,
canRefresh: canAutoRefresh,
scheduledAt: quoteExpiresAt,
onRefresh: () async {
await refreshQuotation();
},
);
}
@override
void dispose() {
_autoRefresh.dispose();
super.dispose();
}
}