Added quote expiry-aware flows with auto-refresh #211
Reference in New Issue
Block a user
Delete Branch "SEND021"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
@@ -76,3 +69,3 @@}PaymentQuote? get quotation => _quotation.data;PaymentQuote? get quotation => hasQuoteForCurrentIntent ? _quotation.data : null;ваще-то при hasQuoteForCurrentIntent _quotation.data железобетонно должно быть null. Реально флажок этот нужен?
_lastRequestSignature ставится только когда успешный ответ получен, но само поле _quotation.data потом может стать null (например, при ошибке обновления котировки мы делаем copyWith(data: null, error: e) и _lastRequestSignature остаётся прежним)
@@ -85,0 +84,4 @@return _lastRequestSignature == _signature(_pendingIntent!);}bool get hasLiveQuote =>часть выражения можно заменить галкой isReady и не повторять ее содержимое внутри этой галки
@@ -171,0 +336,4 @@return DateTime.fromMillisecondsSinceEpoch(expiresAt, isUtc: true);}String _signature(PaymentIntent intent) {а почему так? разве toDTO может выбрасывать исключения? Если может - то это скорее ошибка программирования где-то.
Перехват в _signature нужен, чтобы падение intent.toDTO().toJson() не убило провайдер и всё равно дать подпись. В норме toDTO кидать не должен. Могу еще добавить лог
@@ -59,0 +64,4 @@void _handleFocusChange() {if (_focusNode.hasFocus) return;final quotationProvider = context.read<QuotationProvider>();if (quotationProvider.canRequestQuote) {У тебя canRequestQuote всегда соседствует с вызовом refreshNow. Это означает, что последний должен включать в себя проверку первого, чтобы просто не копипастить код.
@@ -86,0 +92,4 @@if (quotationProvider.canRequestQuote) {quotationProvider.refreshNow();}ScaffoldMessenger.of(context).showSnackBar(нужно это сообщение? Да еще в snackbar?
@@ -0,0 +33,4 @@Expanded(child: SwitchListTile.adaptive(contentPadding: EdgeInsets.zero,value: autoRefreshEnabled,проверь, плиз, новшество на deprecation
Все гуд
@@ -0,0 +95,4 @@}}if (provider.hasQuoteForCurrentIntent) {логику не улавливаю. expired, когда есть котировка для текущего платежа?
quoteExpired показывается, когда для текущего платежа котировка есть, но её срок уже истёк. Пока котировка свежая — видишь таймер quoteExpiresIn, время вышло - quoteExpired
@@ -12,0 +13,4 @@const SendButton({super.key,required this.onPressed,this.state = ButtonState.enabled,а кнопка из провайдера не может состояние свое прочитать? нужно управление снаружи?
View command line instructions
Checkout
From your project repository, check out a new branch and test the changes.