From 3b32393d88c8480d1d70a542c88b6e7492041358 Mon Sep 17 00:00:00 2001 From: Erdem Yerebasmaz Date: Thu, 6 Jul 2023 00:33:43 +0300 Subject: [PATCH] Support pasting LNURL #591 - Update breez_translations for unsupported input's error message - Expose parseInput api through InputBloc - Remove utils/lnurl.dart --- ios/Podfile.lock | 54 ++--- lib/bloc/input/input_bloc.dart | 4 +- .../enter_payment_info_dialog.dart | 84 ++++++-- lib/utils/lnurl.dart | 33 ---- pubspec.lock | 184 ++++++++++++------ pubspec.yaml | 2 +- 6 files changed, 216 insertions(+), 145 deletions(-) delete mode 100644 lib/utils/lnurl.dart diff --git a/ios/Podfile.lock b/ios/Podfile.lock index dadafa31b..c38afee77 100644 --- a/ios/Podfile.lock +++ b/ios/Podfile.lock @@ -6,39 +6,39 @@ PODS: - connectivity_plus (0.0.1): - Flutter - ReachabilitySwift - - Firebase/CoreOnly (10.9.0): - - FirebaseCore (= 10.9.0) - - Firebase/DynamicLinks (10.9.0): + - Firebase/CoreOnly (10.10.0): + - FirebaseCore (= 10.10.0) + - Firebase/DynamicLinks (10.10.0): - Firebase/CoreOnly - - FirebaseDynamicLinks (~> 10.9.0) - - Firebase/Messaging (10.9.0): + - FirebaseDynamicLinks (~> 10.10.0) + - Firebase/Messaging (10.10.0): - Firebase/CoreOnly - - FirebaseMessaging (~> 10.9.0) - - firebase_core (2.13.1): - - Firebase/CoreOnly (= 10.9.0) + - FirebaseMessaging (~> 10.10.0) + - firebase_core (2.14.0): + - Firebase/CoreOnly (= 10.10.0) - Flutter - - firebase_dynamic_links (5.3.2): - - Firebase/DynamicLinks (= 10.9.0) + - firebase_dynamic_links (5.3.3): + - Firebase/DynamicLinks (= 10.10.0) - firebase_core - Flutter - - firebase_messaging (14.6.2): - - Firebase/Messaging (= 10.9.0) + - firebase_messaging (14.6.4): + - Firebase/Messaging (= 10.10.0) - firebase_core - Flutter - - FirebaseCore (10.9.0): + - FirebaseCore (10.10.0): - FirebaseCoreInternal (~> 10.0) - GoogleUtilities/Environment (~> 7.8) - GoogleUtilities/Logger (~> 7.8) - - FirebaseCoreInternal (10.10.0): + - FirebaseCoreInternal (10.11.0): - "GoogleUtilities/NSData+zlib (~> 7.8)" - - FirebaseDynamicLinks (10.9.0): + - FirebaseDynamicLinks (10.10.0): - FirebaseCore (~> 10.0) - - FirebaseInstallations (10.10.0): + - FirebaseInstallations (10.11.0): - FirebaseCore (~> 10.0) - GoogleUtilities/Environment (~> 7.8) - GoogleUtilities/UserDefaults (~> 7.8) - PromisesObjC (~> 2.1) - - FirebaseMessaging (10.9.0): + - FirebaseMessaging (10.10.0): - FirebaseCore (~> 10.0) - FirebaseInstallations (~> 10.0) - GoogleDataTransport (~> 9.2) @@ -283,15 +283,15 @@ SPEC CHECKSUMS: breez_sdk: b771ec4372e4a757a05778e50c65a3da0dff101a clipboard_watcher: 86fb70421aca6f4944e0591a8292605da7784666 connectivity_plus: 07c49e96d7fc92bc9920617b83238c4d178b446a - Firebase: bd152f0f3d278c4060c5c71359db08ebcfd5a3e2 - firebase_core: ce64b0941c6d87c6ef5022ae9116a158236c8c94 - firebase_dynamic_links: db9f2ebcc3ea646e76a1d3ee37e9e57890ff0a83 - firebase_messaging: 42912365e62efc1ea3e00724e5eecba6068ddb88 - FirebaseCore: b68d3616526ec02e4d155166bbafb8eca64af557 - FirebaseCoreInternal: 971029061d326000d65bfdc21f5502c75c8b0893 - FirebaseDynamicLinks: 8cb66c4f403aa6ddf86ff3bc3c383a652f344ce9 - FirebaseInstallations: 52153982b057d3afcb4e1fbb3eb0b6d00611e681 - FirebaseMessaging: 6b7052cc3da7bc8e5f72bef871243e8f04a14eed + Firebase: facd334e557a979bd03a0b58d90fd56b52b8aba0 + firebase_core: 85b6664038311940ad60584eaabc73103c61f5de + firebase_dynamic_links: 8e1ef5000616eb1004f06ec5cdd5e679ef199c29 + firebase_messaging: c55f70dd48a998dea00a29ccf94572e1e4d454b2 + FirebaseCore: d027ff503d37edb78db98429b11f580a24a7df2a + FirebaseCoreInternal: 9e46c82a14a3b3a25be4e1e151ce6d21536b89c0 + FirebaseDynamicLinks: 3f61f496236d30fa749377159fb7b3d82ecb3c49 + FirebaseInstallations: 2a2c6859354cbec0a228a863d4daf6de7c74ced4 + FirebaseMessaging: 8a3b9a8b98ce72a42d22e69865cf662e38d2d6f5 Flutter: f04841e97a9d0b0a8025694d0796dd46242b2854 flutter_fgbg: 31c0d1140a131daea2d342121808f6aa0dcd879d flutter_fimber: 4a6b342666fecb329fca23143f4b72c46cdd8022 @@ -320,7 +320,7 @@ SPEC CHECKSUMS: PromisesObjC: 09985d6d70fbe7878040aa746d78236e6946d2ef ReachabilitySwift: 985039c6f7b23a1da463388634119492ff86c825 share_plus: 599aa54e4ea31d4b4c0e9c911bcc26c55e791028 - shared_preferences_foundation: e2dae3258e06f44cc55f49d42024fd8dd03c590c + shared_preferences_foundation: 5b919d13b803cadd15ed2dc053125c68730e5126 sqlite3: fd89671d969f3e73efe503ce203e28b016b58f68 sqlite3_flutter_libs: 04ba0d14a04335a2fbf9a331e8664f401fbccdd5 TOCropViewController: edfd4f25713d56905ad1e0b9f5be3fbe0f59c863 diff --git a/lib/bloc/input/input_bloc.dart b/lib/bloc/input/input_bloc.dart index 11397d16d..7ba27cb0e 100644 --- a/lib/bloc/input/input_bloc.dart +++ b/lib/bloc/input/input_bloc.dart @@ -55,7 +55,7 @@ class InputBloc extends Cubit { // Emit an empty InputState with isLoading to display a loader on UI layer emit(InputState(isLoading: true)); try { - final parsedInput = await _breezLib.parseInput(input: input); + final parsedInput = await parseInput(input: input); // Todo: Merge these functions w/o sacrificing readability _logParsedInput(parsedInput); return await _handleParsedInput(parsedInput); @@ -147,4 +147,6 @@ class InputBloc extends Cubit { _log.i("url: ${parsedInput.url}"); } } + + Future parseInput({required String input}) async => await _breezLib.parseInput(input: input); } diff --git a/lib/routes/home/widgets/bottom_actions_bar/enter_payment_info_dialog.dart b/lib/routes/home/widgets/bottom_actions_bar/enter_payment_info_dialog.dart index ef4be7756..0f2b0c4c2 100644 --- a/lib/routes/home/widgets/bottom_actions_bar/enter_payment_info_dialog.dart +++ b/lib/routes/home/widgets/bottom_actions_bar/enter_payment_info_dialog.dart @@ -1,12 +1,15 @@ +import 'package:breez_sdk/bridge_generated.dart'; import 'package:breez_translations/breez_translations_locales.dart'; import 'package:c_breez/bloc/input/input_bloc.dart'; import 'package:c_breez/theme/theme_provider.dart' as theme; -import 'package:c_breez/utils/lnurl.dart'; -import 'package:c_breez/utils/node_id.dart'; import 'package:c_breez/widgets/flushbar.dart'; +import 'package:c_breez/widgets/loader.dart'; +import 'package:fimber/fimber.dart'; import 'package:flutter/material.dart'; import 'package:flutter_bloc/flutter_bloc.dart'; +final _log = FimberLog("EnterPaymentInfoDialog"); + class EnterPaymentInfoDialog extends StatefulWidget { final GlobalKey paymentItemKey; @@ -24,6 +27,9 @@ class EnterPaymentInfoDialogState extends State { final _paymentInfoFocusNode = FocusNode(); String _scannerErrorMessage = ""; + String _validatorErrorMessage = ""; + + ModalRoute? _loaderRoute; @override void initState() { @@ -95,12 +101,9 @@ class EnterPaymentInfoDialogState extends State { style: TextStyle( color: themeData.primaryTextTheme.headlineMedium!.color, ), - validator: (v) { - var value = v!; - if (parseNodeId(value) == null && - _decodeInvoice(value) == null && - !isLightningAddress(value)) { - return texts.payment_info_dialog_error; + validator: (value) { + if (_validatorErrorMessage.isNotEmpty) { + return _validatorErrorMessage; } return null; }, @@ -151,10 +154,23 @@ class EnterPaymentInfoDialogState extends State { actions.add( SimpleDialogOption( onPressed: (() async { - if (_formKey.currentState!.validate()) { - Navigator.of(context).pop(); - final inputBloc = context.read(); - inputBloc.addIncomingInput(_paymentInfoController.text); + final inputBloc = context.read(); + final navigator = Navigator.of(context); + _setLoading(true); + + try { + await _validateInput(_paymentInfoController.text); + if (_formKey.currentState!.validate()) { + _setLoading(false); + navigator.pop(); + inputBloc.addIncomingInput(_paymentInfoController.text); + } + } catch (error) { + _setLoading(false); + _log.w(error.toString(), ex: error); + _setValidatorErrorMessage(texts.payment_info_dialog_error); + } finally { + _setLoading(false); } }), child: Text( @@ -186,17 +202,47 @@ class EnterPaymentInfoDialogState extends State { setState(() { _paymentInfoController.text = barcode; _scannerErrorMessage = ""; + _setValidatorErrorMessage(""); + }); + } + + Future _validateInput(String input) async { + final texts = context.texts(); + try { + _setValidatorErrorMessage(""); + final inputType = await context.read().parseInput(input: input); + _log.v("Parsed input type: '${inputType.runtimeType.toString()}"); + // Can't compare against a list of InputType as runtime type comparison is a bit tricky with binding generated enums + if (!(inputType is InputType_Bolt11 || + inputType is InputType_LnUrlPay || + inputType is InputType_LnUrlWithdraw || + inputType is InputType_LnUrlAuth || + inputType is InputType_LnUrlError || + inputType is InputType_NodeId)) { + _setValidatorErrorMessage(texts.payment_info_dialog_error_unsupported_input); + } + } catch (e) { + rethrow; + } + } + + _setValidatorErrorMessage(String errorMessage) { + setState(() { + _validatorErrorMessage = errorMessage; }); + _formKey.currentState?.validate(); } - String? _decodeInvoice(String invoiceString) { - String normalized = invoiceString.toLowerCase(); - if (normalized.startsWith("lightning:")) { - normalized = normalized.substring(10); + void _setLoading(bool visible) { + if (visible && _loaderRoute == null) { + _loaderRoute = createLoaderRoute(context); + Navigator.of(context).push(_loaderRoute!); + return; } - if (normalized.startsWith("ln") && !normalized.startsWith("lnurl")) { - return invoiceString; + + if (!visible && (_loaderRoute != null && _loaderRoute!.isActive)) { + _loaderRoute!.navigator?.removeRoute(_loaderRoute!); + _loaderRoute = null; } - return null; } } diff --git a/lib/utils/lnurl.dart b/lib/utils/lnurl.dart deleted file mode 100644 index 40ba3f9a8..000000000 --- a/lib/utils/lnurl.dart +++ /dev/null @@ -1,33 +0,0 @@ -import 'package:email_validator/email_validator.dart'; -import 'package:fimber/fimber.dart'; - -String _lightningProtocolPrefix = "lightning:"; -final _log = FimberLog("lnurl"); - -bool isLightningAddress(String uri) { - var result = false; - var v = parseLightningAddress(uri); - result = v != null && v.isNotEmpty; - return result; -} - -String? parseLightningAddress(String? uri) { - // Ref. https://github.com/andrerfneves/lightning-address/blob/master/DIY.md - _log.i('parseLightningAddress: given "$uri"'); - - String? result; - if (uri != null && uri.isNotEmpty) { - uri = uri.trim(); - var l = uri.toLowerCase(); - if (l.startsWith(_lightningProtocolPrefix)) { - result = uri.substring(_lightningProtocolPrefix.length); - } - - result ??= uri; - if (!EmailValidator.validate(result)) { - result = null; - } - _log.i('parseLightningAddress: got "$result"'); - } - return result; -} diff --git a/pubspec.lock b/pubspec.lock index 36369fe2a..fa80b9f1b 100644 --- a/pubspec.lock +++ b/pubspec.lock @@ -13,10 +13,10 @@ packages: dependency: transitive description: name: _flutterfire_internals - sha256: "9ebe81588e666f7e2b21309f2b5653bd9642d7f27fd0a6894278d2ff40cb9481" + sha256: a742f71d7f3484253a623b30e19256aa4668ecbb3de6ad1beb0bcf8d4777ecd8 url: "https://pub.dev" source: hosted - version: "1.3.2" + version: "1.3.3" analyzer: dependency: transitive description: @@ -100,8 +100,8 @@ packages: dependency: "direct main" description: path: "." - ref: "1360928cfe6d7b7c3ed876267dcabb6e6522d58f" - resolved-ref: "1360928cfe6d7b7c3ed876267dcabb6e6522d58f" + ref: "5fd7f4cda8d1b19db39ce7d127ac8b1651f356a5" + resolved-ref: "5fd7f4cda8d1b19db39ce7d127ac8b1651f356a5" url: "https://github.com/breez/Breez-Translations" source: git version: "1.0.0" @@ -141,10 +141,10 @@ packages: dependency: transitive description: name: build_resolvers - sha256: db49b8609ef8c81cca2b310618c3017c00f03a92af44c04d310b907b2d692d95 + sha256: "6c4dd11d05d056e76320b828a1db0fc01ccd376922526f8e9d6c796a5adbac20" url: "https://pub.dev" source: hosted - version: "2.2.0" + version: "2.2.1" build_runner: dependency: "direct dev" description: @@ -285,10 +285,10 @@ packages: dependency: transitive description: name: dart_style - sha256: f4f1f73ab3fd2afcbcca165ee601fe980d966af6a21b5970c6c9376955c528ad + sha256: "1efa911ca7086affd35f463ca2fc1799584fb6aa89883cf0af8e3664d6a02d55" url: "https://pub.dev" source: hosted - version: "2.3.1" + version: "2.3.2" dbus: dependency: transitive description: @@ -361,6 +361,38 @@ packages: url: "https://pub.dev" source: hosted version: "6.1.4" + file_selector_linux: + dependency: transitive + description: + name: file_selector_linux + sha256: "770eb1ab057b5ae4326d1c24cc57710758b9a46026349d021d6311bd27580046" + url: "https://pub.dev" + source: hosted + version: "0.9.2" + file_selector_macos: + dependency: transitive + description: + name: file_selector_macos + sha256: "7a6f1ae6107265664f3f7f89a66074882c4d506aef1441c9af313c1f7e6f41ce" + url: "https://pub.dev" + source: hosted + version: "0.9.3" + file_selector_platform_interface: + dependency: transitive + description: + name: file_selector_platform_interface + sha256: "412705a646a0ae90f33f37acfae6a0f7cbc02222d6cd34e479421c3e74d3853c" + url: "https://pub.dev" + source: hosted + version: "2.6.0" + file_selector_windows: + dependency: transitive + description: + name: file_selector_windows + sha256: "1372760c6b389842b77156203308940558a2817360154084368608413835fc26" + url: "https://pub.dev" + source: hosted + version: "0.9.3" fimber: dependency: "direct main" description: @@ -381,10 +413,10 @@ packages: dependency: "direct main" description: name: firebase_core - sha256: e9b36b391690cf329c6fb1de220045e97c13784c303820cd33962319580a56c6 + sha256: a4a99204da264a0aa9d54a332ea0315ce7b0768075139c77abefe98093dd98be url: "https://pub.dev" source: hosted - version: "2.13.1" + version: "2.14.0" firebase_core_platform_interface: dependency: transitive description: @@ -397,50 +429,50 @@ packages: dependency: transitive description: name: firebase_core_web - sha256: "8c0f4c87d20e2d001a5915df238c1f9c88704231f591324205f5a5d2a7740a45" + sha256: "0fd5c4b228de29b55fac38aed0d9e42514b3d3bd47675de52bf7f8fccaf922fa" url: "https://pub.dev" source: hosted - version: "2.5.0" + version: "2.6.0" firebase_dynamic_links: dependency: "direct main" description: name: firebase_dynamic_links - sha256: "830b779cb77badc9d8b438c43b857dc1cd531691473e4592c2cc1c5bf9726d2b" + sha256: "9b984d0abd227a702451a997abcca763f4dbf67e260dad60e5506d55e3eff244" url: "https://pub.dev" source: hosted - version: "5.3.2" + version: "5.3.3" firebase_dynamic_links_platform_interface: dependency: transitive description: name: firebase_dynamic_links_platform_interface - sha256: "8af7e6b9a95c653d84e2a395dc846ef5232531f386ea80b7a8edfa0735f78525" + sha256: "6ef00a0be18f3231e9727f7c4b31db89dbfa16792098beb850603c30854560ff" url: "https://pub.dev" source: hosted - version: "0.2.6+2" + version: "0.2.6+3" firebase_messaging: dependency: "direct main" description: name: firebase_messaging - sha256: a01d7b9eb43a4bad54a411edb2b4124089d88eab029191893e83c39e18ab19f7 + sha256: "7a09d8c21147f009882a27c96de1918ea283f974d73cb6fae1d234bb9ec18d8b" url: "https://pub.dev" source: hosted - version: "14.6.2" + version: "14.6.4" firebase_messaging_platform_interface: dependency: transitive description: name: firebase_messaging_platform_interface - sha256: c2fef3e30fbfa3a71d74477df102d1c2f5aad860bb68bb4086b0af3b12abedf3 + sha256: e9e9dc48a3d8ffa67aaba3d6b1ebf74bc7d7d8c83d10b1458ff97878b9d8a2b0 url: "https://pub.dev" source: hosted - version: "4.5.2" + version: "4.5.3" firebase_messaging_web: dependency: transitive description: name: firebase_messaging_web - sha256: "8d280f0110ca4946b9863e578b9879874066ac486ffa596a609aab329fb6fa7e" + sha256: "381f217e41e0e407baf8df21787b97e46fabfacefd6a953425be3a6cdf2269f4" url: "https://pub.dev" source: hosted - version: "3.5.2" + version: "3.5.3" fixnum: dependency: transitive description: @@ -552,10 +584,10 @@ packages: dependency: "direct dev" description: name: flutter_lints - sha256: aeb0b80a8b3709709c9cc496cdc027c5b3216796bc0af0ce1007eaf24464fd4c + sha256: "2118df84ef0c3ca93f96123a616ae8540879991b8b57af2f81b76a7ada49b2a4" url: "https://pub.dev" source: hosted - version: "2.0.1" + version: "2.0.2" flutter_localizations: dependency: "direct main" description: flutter @@ -757,10 +789,10 @@ packages: dependency: "direct main" description: name: hydrated_bloc - sha256: "0ea117b32259d9a79c2a2d33eef92e9dd676b88ec4f1ef94102c5889ca1673b6" + sha256: "24994e61f64904d911683cce1a31dc4ef611619da5253f1de2b7b8fc6f79a118" url: "https://pub.dev" source: hosted - version: "9.1.1" + version: "9.1.2" image: dependency: "direct main" description: @@ -797,42 +829,66 @@ packages: dependency: "direct main" description: name: image_picker - sha256: "9978d3510af4e6a902e545ce19229b926e6de6a1828d6134d3aab2e129a4d270" + sha256: b6951e25b795d053a6ba03af5f710069c99349de9341af95155d52665cb4607c url: "https://pub.dev" source: hosted - version: "0.8.7+5" + version: "0.8.9" image_picker_android: dependency: transitive description: name: image_picker_android - sha256: "3083c3a3245adf9f3eb7bacf0eaa6a1f087dd538fab73a13a2f7907602601692" + sha256: d2bab152deb2547ea6f53d82ebca9b7e77386bb706e5789e815d37e08ea475bb url: "https://pub.dev" source: hosted - version: "0.8.6+19" + version: "0.8.7+3" image_picker_for_web: dependency: transitive description: name: image_picker_for_web - sha256: "98f50d6b9f294c8ba35e25cc0d13b04bfddd25dbc8d32fa9d566a6572f2c081c" + sha256: "869fe8a64771b7afbc99fc433a5f7be2fea4d1cb3d7c11a48b6b579eb9c797f0" url: "https://pub.dev" source: hosted - version: "2.1.12" + version: "2.2.0" image_picker_ios: dependency: transitive description: name: image_picker_ios - sha256: d779210bda268a03b57e923fb1e410f32f5c5e708ad256348bcbf1f44f558fd0 + sha256: b3e2f21feb28b24dd73a35d7ad6e83f568337c70afab5eabac876e23803f264b url: "https://pub.dev" source: hosted - version: "0.8.7+4" + version: "0.8.8" + image_picker_linux: + dependency: transitive + description: + name: image_picker_linux + sha256: "02cbc21fe1706b97942b575966e5fbbeaac535e76deef70d3a242e4afb857831" + url: "https://pub.dev" + source: hosted + version: "0.2.1" + image_picker_macos: + dependency: transitive + description: + name: image_picker_macos + sha256: cee2aa86c56780c13af2c77b5f2f72973464db204569e1ba2dd744459a065af4 + url: "https://pub.dev" + source: hosted + version: "0.2.1" image_picker_platform_interface: dependency: transitive description: name: image_picker_platform_interface - sha256: "1991219d9dbc42a99aff77e663af8ca51ced592cd6685c9485e3458302d3d4f8" + sha256: "7c7b96bb9413a9c28229e717e6fd1e3edd1cc5569c1778fcca060ecf729b65ee" url: "https://pub.dev" source: hosted - version: "2.6.3" + version: "2.8.0" + image_picker_windows: + dependency: transitive + description: + name: image_picker_windows + sha256: c3066601ea42113922232c7b7b3330a2d86f029f685bba99d82c30e799914952 + url: "https://pub.dev" + source: hosted + version: "0.2.1" ini: dependency: "direct main" description: @@ -970,10 +1026,10 @@ packages: dependency: "direct main" description: name: mobile_scanner - sha256: da55204e5439bc8dc058df56231a7a1d513c6ec9cbad84492f56d493382d296f + sha256: "54dd914e1bb5758b3db7aa02e56d65d80285ba0705e0e5fa5cfbb11e27344c4b" url: "https://pub.dev" source: hosted - version: "3.2.0" + version: "3.3.0" mockito: dependency: "direct main" description: @@ -1218,58 +1274,58 @@ packages: dependency: "direct main" description: name: shared_preferences - sha256: "16d3fb6b3692ad244a695c0183fca18cf81fd4b821664394a781de42386bf022" + sha256: "0344316c947ffeb3a529eac929e1978fcd37c26be4e8468628bac399365a3ca1" url: "https://pub.dev" source: hosted - version: "2.1.1" + version: "2.2.0" shared_preferences_android: dependency: transitive description: name: shared_preferences_android - sha256: "6478c6bbbecfe9aced34c483171e90d7c078f5883558b30ec3163cf18402c749" + sha256: fe8401ec5b6dcd739a0fe9588802069e608c3fdbfd3c3c93e546cf2f90438076 url: "https://pub.dev" source: hosted - version: "2.1.4" + version: "2.2.0" shared_preferences_foundation: dependency: transitive description: name: shared_preferences_foundation - sha256: e014107bb79d6d3297196f4f2d0db54b5d1f85b8ea8ff63b8e8b391a02700feb + sha256: "0dc5c49ad8a05ed358b991b60c7b0ba1a14e16dae58af9b420d6b9e82dc024ab" url: "https://pub.dev" source: hosted - version: "2.2.2" + version: "2.3.0" shared_preferences_linux: dependency: transitive description: name: shared_preferences_linux - sha256: "9d387433ca65717bbf1be88f4d5bb18f10508917a8fa2fb02e0fd0d7479a9afa" + sha256: "71d6806d1449b0a9d4e85e0c7a917771e672a3d5dc61149cc9fac871115018e1" url: "https://pub.dev" source: hosted - version: "2.2.0" + version: "2.3.0" shared_preferences_platform_interface: dependency: transitive description: name: shared_preferences_platform_interface - sha256: fb5cf25c0235df2d0640ac1b1174f6466bd311f621574997ac59018a6664548d + sha256: "23b052f17a25b90ff2b61aad4cc962154da76fb62848a9ce088efe30d7c50ab1" url: "https://pub.dev" source: hosted - version: "2.2.0" + version: "2.3.0" shared_preferences_web: dependency: transitive description: name: shared_preferences_web - sha256: "74083203a8eae241e0de4a0d597dbedab3b8fef5563f33cf3c12d7e93c655ca5" + sha256: "7347b194fb0bbeb4058e6a4e87ee70350b6b2b90f8ac5f8bd5b3a01548f6d33a" url: "https://pub.dev" source: hosted - version: "2.1.0" + version: "2.2.0" shared_preferences_windows: dependency: transitive description: name: shared_preferences_windows - sha256: "5e588e2efef56916a3b229c3bfe81e6a525665a454519ca51dbcc4236a274173" + sha256: f95e6a43162bce43c9c3405f3eb6f39e5b5d11f65fab19196cf8225e2777624d url: "https://pub.dev" source: hosted - version: "2.2.0" + version: "2.3.0" shelf: dependency: transitive description: @@ -1306,10 +1362,10 @@ packages: dependency: "direct main" description: name: simple_animations - sha256: "064b424fd8075af838b767ccf201133cb545e7686f1603e7ce265dcfcf7d5689" + sha256: "1ea7b93fb98e2a611b6865d632de55607b766328d14700143353129ee0559d3a" url: "https://pub.dev" source: hosted - version: "5.0.1" + version: "5.0.2" sky_engine: dependency: transitive description: flutter @@ -1351,10 +1407,10 @@ packages: dependency: transitive description: name: sqflite_common - sha256: e77abf6ff961d69dfef41daccbb66b51e9983cdd5cb35bf30733598057401555 + sha256: "8f7603f3f8f126740bc55c4ca2d1027aab4b74a1267a3e31ce51fe40e3b65b8f" url: "https://pub.dev" source: hosted - version: "2.4.5" + version: "2.4.5+1" sqflite_common_ffi: dependency: "direct main" description: @@ -1471,10 +1527,10 @@ packages: dependency: "direct main" description: name: timeago - sha256: a415b9a05ef64b845c859a91161fc9f689f88eaaa4c04759517d201891b99e90 + sha256: "4addcda362e51f23cf7ae2357fccd053f29d59b4ddd17fb07fc3e7febb47a456" url: "https://pub.dev" source: hosted - version: "3.4.0" + version: "3.5.0" timing: dependency: transitive description: @@ -1487,10 +1543,10 @@ packages: dependency: transitive description: name: tuple - sha256: "0ea99cd2f9352b2586583ab2ce6489d1f95a5f6de6fb9492faaf97ae2060f0aa" + sha256: a97ce2013f240b2f3807bcbaf218765b6f301c3eff91092bcfa23a039e7dd151 url: "https://pub.dev" source: hosted - version: "2.0.1" + version: "2.0.2" typed_data: dependency: transitive description: @@ -1535,10 +1591,10 @@ packages: dependency: transitive description: name: url_launcher_android - sha256: eed4e6a1164aa9794409325c3b707ff424d4d1c2a785e7db67f8bbda00e36e51 + sha256: "15f5acbf0dce90146a0f5a2c4a002b1814a6303c4c5c075aa2623b2d16156f03" url: "https://pub.dev" source: hosted - version: "6.0.35" + version: "6.0.36" url_launcher_ios: dependency: transitive description: @@ -1567,10 +1623,10 @@ packages: dependency: transitive description: name: url_launcher_platform_interface - sha256: "6c9ca697a5ae218ce56cece69d46128169a58aa8653c1b01d26fcd4aad8c4370" + sha256: bfdfa402f1f3298637d71ca8ecfe840b4696698213d5346e9d12d4ab647ee2ea url: "https://pub.dev" source: hosted - version: "2.1.2" + version: "2.1.3" url_launcher_web: dependency: transitive description: diff --git a/pubspec.yaml b/pubspec.yaml index a9ad1f88b..a33f0b096 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -22,7 +22,7 @@ dependencies: breez_translations: git: url: https://github.com/breez/Breez-Translations - ref: 1360928cfe6d7b7c3ed876267dcabb6e6522d58f + ref: 5fd7f4cda8d1b19db39ce7d127ac8b1651f356a5 clipboard_watcher: ^0.2.0 connectivity_plus: ^4.0.1 drag_and_drop_lists: ^0.3.3