From ea94b4570b673ed99f6025dfe2ffa9fdc31697e0 Mon Sep 17 00:00:00 2001 From: poka Date: Fri, 31 Mar 2023 22:53:28 +0200 Subject: [PATCH] fix: load usernames when opening the safe --- .../scenarios/identity_revocation.dart | 5 +- lib/screens/myWallets/wallet_options.dart | 72 +++------- lib/screens/myWallets/wallets_home.dart | 62 ++------ .../onBoarding/11_congratulations.dart | 25 +++- .../buttons/manage_membership_button.dart | 43 ++++++ lib/widgets/cert_tile.dart | 7 +- lib/widgets/idty_status.dart | 13 ++ pubspec.lock | 132 +++++++++--------- 8 files changed, 177 insertions(+), 182 deletions(-) create mode 100644 lib/widgets/buttons/manage_membership_button.dart diff --git a/integration_test/scenarios/identity_revocation.dart b/integration_test/scenarios/identity_revocation.dart index ee3f1a5..63de8cf 100644 --- a/integration_test/scenarios/identity_revocation.dart +++ b/integration_test/scenarios/identity_revocation.dart @@ -35,7 +35,7 @@ void main() async { await waitFor('memberValidated'.tr(), exactMatch: true); // Revoke test5 - await tapKey(keyManageMembership, duration: 1000); + await tapKey(keyManageMembership, duration: 5000); await tapKey(keyRevokeIdty); await tapKey(keyConfirm); spawnBlock(duration: 2000); @@ -49,8 +49,7 @@ void main() async { await goBack(); await tapKey(keyAddDerivation); await tapKey(keyOpenWallet(test1.address), duration: 500); - await tapKey(keyManageMembership, duration: 1000); + await tapKey(keyManageMembership, duration: 3000); await waitFor('youCannotRevokeThisIdentity'.tr().substring(0, 15)); - }, timeout: testTimeout()); } diff --git a/lib/screens/myWallets/wallet_options.dart b/lib/screens/myWallets/wallet_options.dart index 444c4b1..673711f 100644 --- a/lib/screens/myWallets/wallet_options.dart +++ b/lib/screens/myWallets/wallet_options.dart @@ -13,10 +13,10 @@ import 'package:gecko/providers/wallet_options.dart'; import 'package:gecko/providers/wallets_profiles.dart'; import 'package:gecko/screens/certifications.dart'; import 'package:gecko/screens/activity.dart'; -import 'package:gecko/screens/myWallets/manage_membership.dart'; import 'package:gecko/screens/qrcode_fullscreen.dart'; import 'package:gecko/widgets/balance.dart'; import 'package:gecko/widgets/bottom_app_bar.dart'; +import 'package:gecko/widgets/buttons/manage_membership_button.dart'; import 'package:gecko/widgets/certifications.dart'; import 'package:gecko/widgets/commons/offline_info.dart'; import 'package:gecko/widgets/idty_status.dart'; @@ -40,7 +40,6 @@ class WalletOptions extends StatelessWidget { final myWalletProvider = Provider.of(context, listen: false); final duniterIndexer = Provider.of(context, listen: false); - final sub = Provider.of(context, listen: false); // final sub = Provider.of(context, listen: false); // sub.spawnBlock(); @@ -245,6 +244,14 @@ class WalletOptions extends StatelessWidget { SizedBox(height: 30 * ratio), Consumer( builder: (context, walletProvider, _) { + final defaultWallet = + myWalletProvider.getDefaultWallet(); + walletProvider.isDefaultWallet = + walletOptions.address.text == + defaultWallet.address; + final walletData = walletBox + .get(walletOptions.address.text) ?? + WalletData(address: walletOptions.address.text); return Column(children: [ confirmIdentityButton(walletProvider), pubkeyWidget(walletProvider, ctx), @@ -260,27 +267,16 @@ class WalletOptions extends StatelessWidget { currentChest), SizedBox(height: 17 * ratio), // walletProvider.isMember(context, _walletOptions.address.text) - FutureBuilder( - future: - sub.isMember(walletOptions.address.text), - builder: (BuildContext context, - AsyncSnapshot isMember) { - if (isMember.connectionState != - ConnectionState.done || - isMember.hasError) { - return const Text(''); - } - return Column(children: [ - if (!walletProvider.isDefaultWallet && - !isMember.data!) - deleteWallet(context, walletProvider, - currentChest) - else - const SizedBox(), - if (isMember.data!) - manageMembership(context) - ]); - }), + Column(children: [ + if (!walletProvider.isDefaultWallet && + !walletData.isMember) + deleteWallet( + context, walletProvider, currentChest) + else + const SizedBox(), + if (walletData.isMember) + const ManageMembershipButton() + ]) ]); }), ]), @@ -496,36 +492,6 @@ class WalletOptions extends StatelessWidget { ); } - Widget manageMembership(BuildContext context) { - final walletOptions = - Provider.of(context, listen: false); - return InkWell( - key: keyManageMembership, - onTap: () { - Navigator.push( - context, - MaterialPageRoute(builder: (context) { - return ManageMembership( - address: walletOptions.address.text, - ); - }), - ); - }, - child: SizedBox( - height: 40, - child: Row(children: [ - const SizedBox(width: 32), - Image.asset( - 'assets/medal.png', - height: 45, - ), - const SizedBox(width: 22), - Text('manageMembership'.tr(), style: const TextStyle(fontSize: 20)), - ]), - ), - ); - } - Widget setDefaultWalletWidget( BuildContext context, WalletOptionsProvider walletProvider, diff --git a/lib/screens/myWallets/wallets_home.dart b/lib/screens/myWallets/wallets_home.dart index 7536575..664864b 100644 --- a/lib/screens/myWallets/wallets_home.dart +++ b/lib/screens/myWallets/wallets_home.dart @@ -22,6 +22,7 @@ import 'package:gecko/widgets/balance.dart'; import 'package:gecko/widgets/bottom_app_bar.dart'; import 'package:gecko/widgets/commons/offline_info.dart'; import 'package:gecko/widgets/commons/smooth_transition.dart'; +import 'package:gecko/widgets/name_by_address.dart'; import 'package:provider/provider.dart'; import 'package:flutter_svg/flutter_svg.dart'; import 'package:truncate/truncate.dart'; @@ -40,31 +41,6 @@ class _WalletsHomeState extends State { @override void initState() { - // targets - // .add(TargetFocus(identify: "Target 1", keyTarget: safeKey, contents: [ - // TargetContent( - // align: ContentAlign.right, - // child: Column( - // mainAxisSize: MainAxisSize.min, - // crossAxisAlignment: CrossAxisAlignment.start, - // children: const [ - // Text( - // "Titulo lorem ipsum", - // style: TextStyle( - // fontWeight: FontWeight.bold, - // color: Colors.white, - // fontSize: 20.0), - // ), - // Padding( - // padding: EdgeInsets.only(top: 10.0), - // child: Text( - // "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Proin pulvinar tortor eget maximus iaculis.", - // style: TextStyle(color: Colors.white), - // ), - // ) - // ], - // )) - // ])); super.initState(); } @@ -430,31 +406,17 @@ class _WalletsHomeState extends State { children: [ const SizedBox(height: 7), Opacity( - opacity: 0.7, - child: Text( - duniterIndexer.walletNameIndexer[ - repository.address] ?? - truncate( - repository.name!, 20), - style: TextStyle( - fontSize: 20, - color: - defaultWallet.address == - repository.address - ? Colors.white - : Colors.black, - fontWeight: FontWeight.w500), - ), - ) - // NameByAddress( - // wallet: repository, - // address: repository.address, - // size: 20, - // color: defaultWallet.address == - // repository.address - // ? Colors.white - // : Colors.black, - // ), + opacity: 0.7, + child: NameByAddress( + wallet: repository, + size: 20, + color: defaultWallet.address == + repository.address + ? Colors.white + : Colors.black, + fontWeight: FontWeight.w600, + fontStyle: FontStyle.normal, + )) ], ), ], diff --git a/lib/screens/onBoarding/11_congratulations.dart b/lib/screens/onBoarding/11_congratulations.dart index 41a0a37..52d757c 100644 --- a/lib/screens/onBoarding/11_congratulations.dart +++ b/lib/screens/onBoarding/11_congratulations.dart @@ -16,7 +16,7 @@ class OnboardingStepEleven extends StatelessWidget { @override Widget build(BuildContext context) { final conffetiController = - ConfettiController(duration: const Duration(milliseconds: 300)); + ConfettiController(duration: const Duration(milliseconds: 500)); conffetiController.play(); return WillPopScope( onWillPop: () { @@ -55,16 +55,29 @@ class OnboardingStepEleven extends StatelessWidget { const SizedBox(height: 40), ]), Align( - alignment: Alignment.topCenter, + alignment: Alignment.topLeft, child: ConfettiWidget( confettiController: conffetiController, - blastDirection: pi / 2, - maxBlastForce: 5, + blastDirection: pi * 0.1, + maxBlastForce: 10, minBlastForce: 1, emissionFrequency: 0.01, - numberOfParticles: 10, + numberOfParticles: 7, shouldLoop: false, - gravity: 0.1, + gravity: 0.2, + ), + ), + Align( + alignment: Alignment.topRight, + child: ConfettiWidget( + confettiController: conffetiController, + blastDirection: pi * 0.9, + maxBlastForce: 10, + minBlastForce: 1, + emissionFrequency: 0.01, + numberOfParticles: 7, + shouldLoop: false, + gravity: 0.2, ), ), ]), diff --git a/lib/widgets/buttons/manage_membership_button.dart b/lib/widgets/buttons/manage_membership_button.dart new file mode 100644 index 0000000..82f1f51 --- /dev/null +++ b/lib/widgets/buttons/manage_membership_button.dart @@ -0,0 +1,43 @@ +import 'package:easy_localization/easy_localization.dart'; +import 'package:flutter/material.dart'; +import 'package:gecko/models/widgets_keys.dart'; +import 'package:gecko/providers/wallet_options.dart'; +import 'package:gecko/screens/myWallets/manage_membership.dart'; +import 'package:provider/provider.dart'; + +class ManageMembershipButton extends StatelessWidget { + const ManageMembershipButton({ + Key? key, + }) : super(key: key); + + @override + Widget build(BuildContext context) { + final walletOptions = + Provider.of(context, listen: false); + return InkWell( + key: keyManageMembership, + onTap: () { + Navigator.push( + context, + MaterialPageRoute(builder: (context) { + return ManageMembership( + address: walletOptions.address.text, + ); + }), + ); + }, + child: SizedBox( + height: 40, + child: Row(children: [ + const SizedBox(width: 32), + Image.asset( + 'assets/medal.png', + height: 45, + ), + const SizedBox(width: 22), + Text('manageMembership'.tr(), style: const TextStyle(fontSize: 20)), + ]), + ), + ); + } +} diff --git a/lib/widgets/cert_tile.dart b/lib/widgets/cert_tile.dart index 67402c7..acdab78 100644 --- a/lib/widgets/cert_tile.dart +++ b/lib/widgets/cert_tile.dart @@ -60,10 +60,9 @@ class CertTile extends StatelessWidget { TextSpan( text: getShortPubkey(repository['address']), style: TextStyle( - fontStyle: FontStyle.italic, - color: Colors.grey[600], - fontSize: 18 - ), + fontStyle: FontStyle.italic, + color: Colors.grey[600], + fontSize: 18), ), ], ), diff --git a/lib/widgets/idty_status.dart b/lib/widgets/idty_status.dart index 9dd6810..534608e 100644 --- a/lib/widgets/idty_status.dart +++ b/lib/widgets/idty_status.dart @@ -1,5 +1,6 @@ import 'package:easy_localization/easy_localization.dart'; import 'package:flutter/material.dart'; +import 'package:gecko/globals.dart'; import 'package:gecko/models/wallet_data.dart'; import 'package:gecko/providers/duniter_indexer.dart'; import 'package:gecko/providers/substrate_sdk.dart'; @@ -22,6 +23,8 @@ class IdentityStatus extends StatelessWidget { Widget build(BuildContext context) { final duniterIndexer = Provider.of(context, listen: false); + final walletData = walletBox.get(address) ?? WalletData(address: address); + return Consumer(builder: (context, sub, _) { return FutureBuilder( future: sub.idtyStatus(address), @@ -30,14 +33,20 @@ class IdentityStatus extends StatelessWidget { duniterIndexer.idtyStatusCache[address] = snapshot.data.toString(); switch (snapshot.data.toString()) { case 'noid': + walletData.isMember = false; + walletBox.put(address, walletData); { return showText('noIdentity'.tr()); } case 'Created': + walletData.isMember = false; + walletBox.put(address, walletData); { return showText('identityCreated'.tr()); } case 'ConfirmedByOwner': + walletData.isMember = false; + walletBox.put(address, walletData); { return isOwner ? showText('identityConfirmed'.tr()) @@ -49,6 +58,8 @@ class IdentityStatus extends StatelessWidget { fontStyle: FontStyle.italic); } case 'Validated': + walletData.isMember = true; + walletBox.put(address, walletData); { return isOwner ? showText('memberValidated'.tr(), 18, true) @@ -60,6 +71,8 @@ class IdentityStatus extends StatelessWidget { fontStyle: FontStyle.normal); } case 'expired': + walletData.isMember = false; + walletBox.put(address, walletData); { return showText('identityExpired'.tr()); } diff --git a/pubspec.lock b/pubspec.lock index f5d5a8a..c4b62d5 100644 --- a/pubspec.lock +++ b/pubspec.lock @@ -5,10 +5,10 @@ packages: dependency: transitive description: name: _fe_analyzer_shared - sha256: "0c80aeab9bc807ab10022cd3b2f4cf2ecdf231949dc1ddd9442406a003f19201" + sha256: "503361166f4a100e0d7eb7fb5a62c6f0322512f2bcb48d6922caf98f24b0ab90" url: "https://pub.dev" source: hosted - version: "52.0.0" + version: "56.0.0" accordion: dependency: "direct main" description: @@ -21,10 +21,10 @@ packages: dependency: transitive description: name: analyzer - sha256: cd8ee83568a77f3ae6b913a36093a1c9b1264e7cb7f834d9ddd2311dade9c1f4 + sha256: "93fcd81a6716e69864516750590cf1e699420615046bda19100238aa7b429785" url: "https://pub.dev" source: hosted - version: "5.4.0" + version: "5.8.0" analyzer_plugin: dependency: transitive description: @@ -325,26 +325,26 @@ packages: dependency: "direct dev" description: name: dart_code_metrics - sha256: "026e28da197a03caeccccc0b174ec98ef03da3c81c4543314d7add121aab4375" + sha256: "728b1835a8c5b994ae8111148b427236f2f89954eebcb62baf4c476909b3d02d" url: "https://pub.dev" source: hosted - version: "5.6.0" + version: "5.7.0" dart_code_metrics_presets: dependency: transitive description: name: dart_code_metrics_presets - sha256: d3c36f97470f478c8432cee163058750db3d167c0a7af9bf291f48dd86c75086 + sha256: "1b841b3ab3e7b942683a706cfbcef55fe9f38e7d01b690dbcd2e9f3c8e268525" url: "https://pub.dev" source: hosted - version: "1.4.1" + version: "1.5.0" dart_style: dependency: transitive description: name: dart_style - sha256: "5be16bf1707658e4c03078d4a9b90208ded217fb02c163e207d334082412f2fb" + sha256: "6d691edde054969f0e0f26abb1b30834b5138b963793e56f69d3a9a4435e6352" url: "https://pub.dev" source: hosted - version: "2.2.5" + version: "2.3.0" dbus: dependency: transitive description: @@ -365,10 +365,10 @@ packages: dependency: "direct main" description: name: dio - sha256: "2644a9e0965a7aa3deb09cb8ce4081db4450c178f472818c8cd34216a3070d7b" + sha256: "0894a098594263fe1caaba3520e3016d8a855caeb010a882273189cca10f11e9" url: "https://pub.dev" source: hosted - version: "5.0.2" + version: "5.1.1" dots_indicator: dependency: "direct main" description: @@ -548,10 +548,10 @@ packages: dependency: "direct main" description: name: flutter_svg - sha256: "017cb37b3e9bee44cc800e35469f295d537484602f02ce6ceb5876236cc7e1fe" + sha256: "12006889e2987c549c4c1ec1a5ba4ec4b24d34d2469ee5f9476c926dcecff266" url: "https://pub.dev" source: hosted - version: "2.0.3" + version: "2.0.4" flutter_test: dependency: "direct dev" description: flutter @@ -763,10 +763,10 @@ packages: dependency: "direct main" description: name: image_cropper - sha256: "85324928ee8a8be35a529446435ca53067865b9353c8681983472eeec66d780f" + sha256: e08311fcf0cdba367715a5036aec8d8e9b3ab84479909dc2156dd5bf872edefb url: "https://pub.dev" source: hosted - version: "3.0.1" + version: "3.0.2" image_cropper_for_web: dependency: transitive description: @@ -787,18 +787,18 @@ packages: dependency: "direct main" description: name: image_picker - sha256: "64b21d9f0e065f9ab0e4dde458076226c97382cc0c6949144cb874c62bf8e9f8" + sha256: cb25f04595a88450970dbe727243ba8cd21b6f7e0d7d1fc5b789fc6f52e95494 url: "https://pub.dev" source: hosted - version: "0.8.7" + version: "0.8.7+1" image_picker_android: dependency: transitive description: name: image_picker_android - sha256: "1f5a4b38eb742422d89c1a01d9db6077c3c9496f551bc9da74649e338a2b5101" + sha256: dfb5b0f28b8786fcc662b7ed42bfb4b82a6cbbd74da1958384b10d40bdf212a7 url: "https://pub.dev" source: hosted - version: "0.8.6" + version: "0.8.6+6" image_picker_for_web: dependency: transitive description: @@ -811,10 +811,10 @@ packages: dependency: transitive description: name: image_picker_ios - sha256: "50e882fe0a06bf0c8f7f5bce78d30975f279213293afc9471dc35f05617c50ff" + sha256: d4cb8ab04f770dab9d04c7959e5f6d22e8c5280343d425f9344f93832cf58445 url: "https://pub.dev" source: hosted - version: "0.8.7+1" + version: "0.8.7+2" image_picker_platform_interface: dependency: transitive description: @@ -888,10 +888,10 @@ packages: dependency: "direct main" description: name: logger - sha256: c40f9ef51e5bffb4ce69ad2d8c8aad7bd47ec109c090521109b63a4e2bc27191 + sha256: db2ff852ed77090ba9f62d3611e4208a3d11dfa35991a81ae724c113fcb3e3f7 url: "https://pub.dev" source: hosted - version: "1.2.2" + version: "1.3.0" logging: dependency: transitive description: @@ -904,10 +904,10 @@ packages: dependency: transitive description: name: markdown - sha256: b3c60dee8c2af50ad0e6e90cceba98e47718a6ee0a7a6772c77846a0cc21f78b + sha256: d95a9d12954aafc97f984ca29baaa7690ed4d9ec4140a23ad40580bcdb6c87f5 url: "https://pub.dev" source: hosted - version: "7.0.1" + version: "7.0.2" matcher: dependency: transitive description: @@ -1016,10 +1016,10 @@ packages: dependency: "direct main" description: name: path_provider - sha256: "04890b994ee89bfa80bf3080bfec40d5a92c5c7a785ebb02c13084a099d2b6f9" + sha256: c7edf82217d4b2952b2129a61d3ad60f1075b9299e629e149a8d2e39c2e6aad4 url: "https://pub.dev" source: hosted - version: "2.0.13" + version: "2.0.14" path_provider_android: dependency: transitive description: @@ -1032,10 +1032,10 @@ packages: dependency: transitive description: name: path_provider_foundation - sha256: "026b97a6c29da75181a37aae2eba9227f5fe13cb2838c6b975ce209328b8ab4e" + sha256: "818b2dc38b0f178e0ea3f7cf3b28146faab11375985d815942a68eee11c2d0f7" url: "https://pub.dev" source: hosted - version: "2.1.3" + version: "2.2.1" path_provider_linux: dependency: transitive description: @@ -1064,10 +1064,10 @@ packages: dependency: "direct main" description: name: pdf - sha256: "6cd57e8e6d052bd1078f18e0dc7cd6701fad6288231c1ce99d66ef5034d14e61" + sha256: "586d3debf5432e5377044754032cfa53ab45e9abf371d4865e9ad5019570e246" url: "https://pub.dev" source: hosted - version: "3.9.0" + version: "3.10.1" permission_handler: dependency: "direct main" description: @@ -1088,10 +1088,10 @@ packages: dependency: transitive description: name: permission_handler_apple - sha256: "9c370ef6a18b1c4b2f7f35944d644a56aa23576f23abee654cf73968de93f163" + sha256: ee96ac32f5a8e6f80756e25b25b9f8e535816c8e6665a96b6d70681f8c4f7e85 url: "https://pub.dev" source: hosted - version: "9.0.7" + version: "9.0.8" permission_handler_platform_interface: dependency: transitive description: @@ -1152,10 +1152,10 @@ packages: dependency: "direct main" description: name: pointycastle - sha256: db7306cf0249f838d1a24af52b5a5887c5bf7f31d8bb4e827d071dc0939ad346 + sha256: c3120a968135aead39699267f4c74bc9a08e4e909e86bc1b0af5bfd78691123c url: "https://pub.dev" source: hosted - version: "3.6.2" + version: "3.7.2" polkawallet_sdk: dependency: "direct main" description: @@ -1177,10 +1177,10 @@ packages: dependency: "direct main" description: name: printing - sha256: fe654363cd0114b50a0815b24e96957c7e9a60eb4e3b7ccfe71cf3f2b7114cb2 + sha256: c5c19dd852e95aa140141df13fa304f079a20c4a14a66de5275a0f811240aeec url: "https://pub.dev" source: hosted - version: "5.10.1" + version: "5.10.3" process: dependency: transitive description: @@ -1266,10 +1266,10 @@ packages: dependency: "direct main" description: name: riverpod - sha256: "7da5a0febdb7fd0e4340f7b7023cb8f17cf7acd405b1e67a0e98bf574085bfa5" + sha256: b0fbf7927333c5c318f7e2c22c8b4fd2542ba294de0373e80ecdb34e0dcd8dc4 url: "https://pub.dev" source: hosted - version: "2.3.1" + version: "2.3.2" rxdart: dependency: transitive description: @@ -1314,58 +1314,58 @@ packages: dependency: "direct main" description: name: shared_preferences - sha256: ee6257848f822b8481691f20c3e6d2bfee2e9eccb2a3d249907fcfb198c55b41 + sha256: "78528fd87d0d08ffd3e69551173c026e8eacc7b7079c82eb6a77413957b7e394" url: "https://pub.dev" source: hosted - version: "2.0.18" + version: "2.0.20" shared_preferences_android: dependency: transitive description: name: shared_preferences_android - sha256: ad423a80fe7b4e48b50d6111b3ea1027af0e959e49d485712e134863d9c1c521 + sha256: "8304d8a1f7d21a429f91dee552792249362b68a331ac5c3c1caf370f658873f6" url: "https://pub.dev" source: hosted - version: "2.0.17" + version: "2.1.0" shared_preferences_foundation: dependency: transitive description: name: shared_preferences_foundation - sha256: "1e755f8583229f185cfca61b1d80fb2344c9d660e1c69ede5450d8f478fa5310" + sha256: cf2a42fb20148502022861f71698db12d937c7459345a1bdaa88fc91a91b3603 url: "https://pub.dev" source: hosted - version: "2.1.5" + version: "2.2.0" shared_preferences_linux: dependency: transitive description: name: shared_preferences_linux - sha256: "3a59ed10890a8409ad0faad7bb2957dab4b92b8fbe553257b05d30ed8af2c707" + sha256: "9d387433ca65717bbf1be88f4d5bb18f10508917a8fa2fb02e0fd0d7479a9afa" url: "https://pub.dev" source: hosted - version: "2.1.5" + version: "2.2.0" shared_preferences_platform_interface: dependency: transitive description: name: shared_preferences_platform_interface - sha256: "824bfd02713e37603b2bdade0842e47d56e7db32b1dcdd1cae533fb88e2913fc" + sha256: fb5cf25c0235df2d0640ac1b1174f6466bd311f621574997ac59018a6664548d url: "https://pub.dev" source: hosted - version: "2.1.1" + version: "2.2.0" shared_preferences_web: dependency: transitive description: name: shared_preferences_web - sha256: "0dc2633f215a3d4aa3184c9b2c5766f4711e4e5a6b256e62aafee41f89f1bfb8" + sha256: "74083203a8eae241e0de4a0d597dbedab3b8fef5563f33cf3c12d7e93c655ca5" url: "https://pub.dev" source: hosted - version: "2.0.6" + version: "2.1.0" shared_preferences_windows: dependency: transitive description: name: shared_preferences_windows - sha256: "71bcd669bb9cdb6b39f22c4a7728b6d49e934f6cba73157ffa5a54f1eed67436" + sha256: "5e588e2efef56916a3b229c3bfe81e6a525665a454519ca51dbcc4236a274173" url: "https://pub.dev" source: hosted - version: "2.1.5" + version: "2.2.0" shelf: dependency: transitive description: @@ -1495,10 +1495,10 @@ packages: dependency: "direct main" description: name: tutorial_coach_mark - sha256: "7cc5364d1df475cdcd759c1b97bde5092ba53e80c1db848684e601fde38c0337" + sha256: "669d4bd517d22e14671f3ddee0e7442d976ab71f94bb6eec6ad057ca3944fd73" url: "https://pub.dev" source: hosted - version: "1.2.6" + version: "1.2.8" typed_data: dependency: transitive description: @@ -1535,18 +1535,18 @@ packages: dependency: transitive description: name: url_launcher_android - sha256: "845530e5e05db5500c1a4c1446785d60cbd8f9bd45e21e7dd643a3273bb4bbd1" + sha256: dd729390aa936bf1bdf5cd1bc7468ff340263f80a2c4f569416507667de8e3c8 url: "https://pub.dev" source: hosted - version: "6.0.25" + version: "6.0.26" url_launcher_ios: dependency: transitive description: name: url_launcher_ios - sha256: "7ab1e5b646623d6a2537aa59d5d039f90eebef75a7c25e105f6f75de1f7750c3" + sha256: "3dedc66ca3c0bef9e6a93c0999aee102556a450afcc1b7bcfeace7a424927d92" url: "https://pub.dev" source: hosted - version: "6.1.2" + version: "6.1.3" url_launcher_linux: dependency: transitive description: @@ -1599,26 +1599,26 @@ packages: dependency: transitive description: name: vector_graphics - sha256: "2f317d969a9f1eb59d1890643107da749698b7c08c4b0532fc95c8a7130d2803" + sha256: "4cf8e60dbe4d3a693d37dff11255a172594c0793da542183cbfe7fe978ae4aaa" url: "https://pub.dev" source: hosted - version: "1.1.3" + version: "1.1.4" vector_graphics_codec: dependency: transitive description: name: vector_graphics_codec - sha256: "13cccfda2dd61232a19dfb769b7a907e2ab23aabfebb9053c81e29c6c11b1766" + sha256: "278ad5f816f58b1967396d1f78ced470e3e58c9fe4b27010102c0a595c764468" url: "https://pub.dev" source: hosted - version: "1.1.3" + version: "1.1.4" vector_graphics_compiler: dependency: transitive description: name: vector_graphics_compiler - sha256: "524c9889a1327401124fe068840a8867f0d57987c1219a2a696ade629ec2bec3" + sha256: "0bf61ad56e6fd6688a2865d3ceaea396bc6a0a90ea0d7ad5049b1b76c09d6163" url: "https://pub.dev" source: hosted - version: "1.1.3" + version: "1.1.4" vector_math: dependency: transitive description: