From cd6c3e9c700c755498f28b3428596f76cad0ca98 Mon Sep 17 00:00:00 2001 From: poka <poka@p2p.legal> Date: Sun, 29 May 2022 04:30:03 +0200 Subject: [PATCH] Dynamic home message; improve node statut UX --- assets/avatars/0.png | Bin 5715 -> 6994 bytes assets/avatars/3.png | Bin 6994 -> 5715 bytes lib/globals.dart | 2 +- lib/providers/home.dart | 10 ++ lib/providers/my_wallets.dart | 17 +++- lib/providers/substrate_sdk.dart | 8 +- lib/providers/wallet_options.dart | 5 +- lib/screens/home.dart | 52 +++++----- lib/screens/myWallets/wallet_options.dart | 23 +++-- lib/screens/settings.dart | 113 +++++++--------------- pubspec.yaml | 2 +- 11 files changed, 116 insertions(+), 116 deletions(-) diff --git a/assets/avatars/0.png b/assets/avatars/0.png index 452efff283e4353c46658ae50262fe4dad73759c..47e563e14283862667587106398567eee52ebd1e 100755 GIT binary patch delta 6970 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 Bf6o8_ delta 5681 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 CNDz<! diff --git a/assets/avatars/3.png b/assets/avatars/3.png index 47e563e14283862667587106398567eee52ebd1e..452efff283e4353c46658ae50262fe4dad73759c 100755 GIT binary patch delta 5681 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 CNDz<! delta 6970 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 Bf6o8_ diff --git a/lib/globals.dart b/lib/globals.dart index 1b3913cf..4f3d9c2d 100644 --- a/lib/globals.dart +++ b/lib/globals.dart @@ -8,7 +8,7 @@ import 'package:logger/logger.dart'; import 'package:shared_preferences/shared_preferences.dart'; // Version of box data -const int dataVersion = 2; +const int dataVersion = 3; // Files paths Directory? appPath; diff --git a/lib/providers/home.dart b/lib/providers/home.dart index 0b52d947..2bbff48a 100644 --- a/lib/providers/home.dart +++ b/lib/providers/home.dart @@ -26,6 +26,7 @@ class HomeProvider with ChangeNotifier { Widget appBarTitle = Text('Ğecko', style: TextStyle(color: Colors.grey[850])); Widget appBarExplorer = Text('Explorateur', style: TextStyle(color: Colors.grey[850])); + String homeMessage = "y'a pas de lézard ;-)"; Future<void> initHive() async { late Directory hivePath; @@ -71,6 +72,15 @@ class HomeProvider with ChangeNotifier { return version + '+' + buildNumber; } + Future changeMessage(String newMessage, int seconds) async { + final oldMessage = homeMessage; + homeMessage = newMessage; + notifyListeners(); + await Future.delayed(Duration(seconds: seconds)); + homeMessage = oldMessage; + notifyListeners(); + } + Future<List?> getValidEndpoints() async { await configBox.delete('endpoint'); diff --git a/lib/providers/my_wallets.dart b/lib/providers/my_wallets.dart index 2ba85661..6c9600e9 100644 --- a/lib/providers/my_wallets.dart +++ b/lib/providers/my_wallets.dart @@ -41,7 +41,7 @@ class MyWalletsProvider with ChangeNotifier { return listWallets; } - WalletData? getWalletData(List<int?> _id) { + WalletData? getWalletDataById(List<int?> _id) { if (_id.isEmpty) return WalletData(); int? _chest = _id[0]; int? _nbr = _id[1]; @@ -57,13 +57,26 @@ class MyWalletsProvider with ChangeNotifier { return _targetedWallet; } + WalletData? getWalletDataByAddress(String address) { + WalletData? _targetedWallet; + + walletBox.toMap().forEach((key, value) { + if (value.address == address) { + _targetedWallet = value; + return; + } + }); + + return _targetedWallet; + } + WalletData? getDefaultWallet([int? chest]) { if (chestBox.isEmpty) { return WalletData(chest: 0, number: 0); } else { chest ??= getCurrentChest(); int? defaultWalletNumber = chestBox.get(chest)!.defaultWallet; - return getWalletData([chest, defaultWalletNumber]); + return getWalletDataById([chest, defaultWalletNumber]); } } diff --git a/lib/providers/substrate_sdk.dart b/lib/providers/substrate_sdk.dart index 9ab49c16..e25ae057 100644 --- a/lib/providers/substrate_sdk.dart +++ b/lib/providers/substrate_sdk.dart @@ -5,6 +5,7 @@ import 'package:flutter/services.dart'; import 'package:gecko/globals.dart'; import 'package:gecko/models/chest_data.dart'; import 'package:gecko/models/wallet_data.dart'; +import 'package:gecko/providers/home.dart'; import 'package:polkawallet_sdk/api/apiKeyring.dart'; import 'package:polkawallet_sdk/api/types/networkParams.dart'; import 'package:polkawallet_sdk/api/types/txInfoData.dart'; @@ -46,6 +47,7 @@ class SubstrateSdk with ChangeNotifier { Future<void> connectNode(BuildContext ctx) async { List<NetworkParams> node = []; + HomeProvider _homeProvider = Provider.of<HomeProvider>(ctx, listen: false); for (String _endpoint in configBox.get('endpoint')) { final n = NetworkParams(); @@ -98,12 +100,14 @@ class SubstrateSdk with ChangeNotifier { notifyListeners(); }); notifyListeners(); - snackNode(ctx, true); + _homeProvider.changeMessage('Vous êtes bien connecté', 3); + // snackNode(ctx, true); } else { nodeConnected = false; debugConnection = res.toString(); notifyListeners(); - snackNode(ctx, false); + _homeProvider.changeMessage('Vous êtes pas connecté', 3); + // snackNode(ctx, false); } log.d(sdk.api.connectedNode?.endpoint); diff --git a/lib/providers/wallet_options.dart b/lib/providers/wallet_options.dart index 02aeef82..0f5d531b 100644 --- a/lib/providers/wallet_options.dart +++ b/lib/providers/wallet_options.dart @@ -31,7 +31,7 @@ class WalletOptionsProvider with ChangeNotifier { {required bool isCesium}) async { MyWalletsProvider myWalletClass = MyWalletsProvider(); - WalletData _walletTarget = myWalletClass.getWalletData(_walletID)!; + WalletData _walletTarget = myWalletClass.getWalletDataById(_walletID)!; _walletTarget.name = _newName; await walletBox.put(_walletTarget.key, _walletTarget); @@ -214,6 +214,9 @@ class WalletOptionsProvider with ChangeNotifier { TextButton( child: const Text("Valider"), onPressed: () async { + final _wallet = + _myWalletProvider.getWalletDataByAddress(address.text); + await _sub.setCurrentWallet(_wallet!); _sub.confirmIdentity(_walletOptions.address.text, idtyName.text, _myWalletProvider.pinCode); Navigator.pop(context); diff --git a/lib/screens/home.dart b/lib/screens/home.dart index 55bc56a7..afaa3b2a 100644 --- a/lib/screens/home.dart +++ b/lib/screens/home.dart @@ -2,6 +2,7 @@ import 'package:bubble/bubble.dart'; import 'package:gecko/globals.dart'; import 'package:gecko/models/stateful_wrapper.dart'; import 'package:gecko/providers/chest_provider.dart'; +import 'package:gecko/providers/home.dart'; import 'package:gecko/providers/substrate_sdk.dart'; import 'package:gecko/providers/wallets_profiles.dart'; import 'package:flutter/material.dart'; @@ -23,7 +24,6 @@ class HomeScreen extends StatelessWidget { @override Widget build(BuildContext context) { SystemChrome.setPreferredOrientations([DeviceOrientation.portraitUp]); - // HomeProvider _homeProvider = Provider.of<HomeProvider>(context); MyWalletsProvider _myWalletProvider = Provider.of<MyWalletsProvider>(context); Provider.of<ChestProvider>(context); @@ -103,6 +103,7 @@ class HomeScreen extends StatelessWidget { WidgetsBinding.instance.addPostFrameCallback((_) async { if (!_sub.sdkReady && !_sub.sdkLoading) await _sub.initApi(); if (_sub.sdkReady && !_sub.nodeConnected) { + // Check if versionData non compatible, drop everything if (walletBox.isNotEmpty && walletBox.getAt(0)!.version! < dataVersion) { await infoPopup(context, @@ -185,31 +186,32 @@ Widget geckHome(context) { ]), Padding( padding: EdgeInsets.only(top: 15 * ratio), - child: Row( - mainAxisAlignment: MainAxisAlignment.center, - children: const <Widget>[ - Text( - "y'a pas de lézard ;-)", - textAlign: TextAlign.center, - style: TextStyle( - color: Colors.white, - fontSize: 24, - fontWeight: FontWeight.w700, - shadows: <Shadow>[ - Shadow( - offset: Offset(0, 0), - blurRadius: 20, - color: Colors.black, - ), - Shadow( - offset: Offset(0, 0), - blurRadius: 20, - color: Colors.black, - ), - ], - ), + child: + Row(mainAxisAlignment: MainAxisAlignment.center, children: <Widget>[ + Consumer<HomeProvider>(builder: (context, _homeP, _) { + return Text( + _homeP.homeMessage, + textAlign: TextAlign.center, + style: const TextStyle( + color: Colors.white, + fontSize: 24, + fontWeight: FontWeight.w700, + shadows: <Shadow>[ + Shadow( + offset: Offset(0, 0), + blurRadius: 20, + color: Colors.black, + ), + Shadow( + offset: Offset(0, 0), + blurRadius: 20, + color: Colors.black, + ), + ], ), - ]), + ); + }), + ]), ), const SizedBox(height: 15), Expanded( diff --git a/lib/screens/myWallets/wallet_options.dart b/lib/screens/myWallets/wallet_options.dart index a9409683..fa8f0ebe 100644 --- a/lib/screens/myWallets/wallet_options.dart +++ b/lib/screens/myWallets/wallet_options.dart @@ -126,7 +126,7 @@ class WalletOptions extends StatelessWidget { historyWidget( context, _historyProvider, walletProvider), SizedBox(height: 12 * ratio), - setDefaultWallet(context, walletProvider, + setDefaultWalletWidget(context, walletProvider, _myWalletProvider, _walletOptions, _currentChest), SizedBox(height: 17 * ratio), if (!walletProvider.isDefaultWallet) @@ -349,25 +349,20 @@ class WalletOptions extends StatelessWidget { ); } - Widget setDefaultWallet( + Widget setDefaultWalletWidget( BuildContext context, WalletOptionsProvider walletProvider, MyWalletsProvider _myWalletProvider, WalletOptionsProvider _walletOptions, int _currentChest) { WalletData defaultWallet = _myWalletProvider.getDefaultWallet()!; - SubstrateSdk _sub = Provider.of<SubstrateSdk>(context, listen: false); - _walletOptions.isDefaultWallet = (defaultWallet.number == wallet.id()[1]); return InkWell( key: const Key('setDefaultWallet'), onTap: !walletProvider.isDefaultWallet ? () async { - defaultWallet = wallet; - await _sub.setCurrentWallet(wallet); - _myWalletProvider.readAllWallets(_currentChest); - _myWalletProvider.rebuildWidget(); + await setDefaultWallet(context, _currentChest); } : null, child: SizedBox( @@ -397,6 +392,18 @@ class WalletOptions extends StatelessWidget { ); } + Future setDefaultWallet(BuildContext context, int _currentChest) async { + SubstrateSdk _sub = Provider.of<SubstrateSdk>(context, listen: false); + MyWalletsProvider _myWalletProvider = + Provider.of<MyWalletsProvider>(context, listen: false); + + // WalletData defaultWallet = _myWalletProvider.getDefaultWallet()!; + // defaultWallet = wallet; + await _sub.setCurrentWallet(wallet); + _myWalletProvider.readAllWallets(_currentChest); + _myWalletProvider.rebuildWidget(); + } + Widget deleteWallet( BuildContext context, WalletOptionsProvider walletProvider, diff --git a/lib/screens/settings.dart b/lib/screens/settings.dart index d58fbda9..e5c780fe 100644 --- a/lib/screens/settings.dart +++ b/lib/screens/settings.dart @@ -4,10 +4,7 @@ import 'package:flutter/services.dart'; import 'package:gecko/providers/my_wallets.dart'; import 'package:gecko/providers/substrate_sdk.dart'; import 'dart:io'; -// import 'package:gecko/screens/myWallets/import_cesium_wallet.dart'; import 'package:gecko/globals.dart'; -import 'package:gecko/screens/myWallets/restore_chest.dart'; -import 'package:gecko/screens/onBoarding/5.dart'; import 'package:provider/provider.dart'; // ignore: must_be_immutable @@ -51,80 +48,42 @@ class SettingsScreen extends StatelessWidget { children: <Widget>[ const SizedBox(height: 60), Row(children: [ - Text(' Noeud $currencyName :'), - const SizedBox(width: 20), - SizedBox( - width: 200, - height: 50, - child: TextField( - controller: _endpointController, - autocorrect: false, - ), - ), - const Spacer(), Consumer<SubstrateSdk>(builder: (context, _sub, _) { - return _sub.isLoadingEndpoint - ? CircularProgressIndicator(color: orangeC) - : IconButton( - icon: Icon( - Icons.send, - color: orangeC, - size: 40, - ), - onPressed: () async { - configBox.put('endpoint', [_endpointController.text]); - await _sub.connectNode(context); - }); + return Expanded( + child: Row(children: [ + Text(' Noeud $currencyName :'), + const Spacer(), + Icon(_sub.nodeConnected ? Icons.check : Icons.close), + const Spacer(), + SizedBox( + width: 200, + height: 50, + child: TextField( + controller: _endpointController, + autocorrect: false, + ), + ), + const Spacer(flex: 5), + _sub.isLoadingEndpoint + ? CircularProgressIndicator(color: orangeC) + : IconButton( + icon: Icon( + Icons.send, + color: orangeC, + size: 40, + ), + onPressed: () async { + configBox + .put('endpoint', [_endpointController.text]); + await _sub.connectNode(context); + }), + const Spacer(flex: 8), + ]), + ); }), - const Spacer(), ]), - SizedBox(height: isTall ? 50 : 20), - SizedBox( - height: buttonHigh, - width: buttonWidth, - child: ElevatedButton( - key: const Key('generateKeychain'), - style: ElevatedButton.styleFrom( - elevation: 5, - primary: yellowC, // background - onPrimary: Colors.black, // foreground - ), - onPressed: () => Navigator.push( - context, - MaterialPageRoute(builder: (context) { - return const OnboardingStepFive(skipIntro: true); - }), - ), - child: const Text( - "Générer un coffre", - style: TextStyle(fontSize: fontSize), - ), - ), - ), - const SizedBox(height: 20), - SizedBox( - height: buttonHigh, - width: buttonWidth, - child: ElevatedButton( - key: const Key('generateKeychain'), - style: ElevatedButton.styleFrom( - elevation: 5, - primary: yellowC, // background - onPrimary: Colors.black, // foreground - ), - onPressed: () => Navigator.push( - context, - MaterialPageRoute(builder: (context) { - return const RestoreChest(skipIntro: true); - }), - ), - child: const Text( - "Restaurer un coffre", - style: TextStyle(fontSize: fontSize), - ), - ), - ), - const SizedBox(height: 25), + // SizedBox(height: isTall ? 80 : 120), + const Spacer(), SizedBox( height: buttonHigh, width: buttonWidth, @@ -138,14 +97,16 @@ class SettingsScreen extends StatelessWidget { child: const Text( 'Oublier tous mes coffres', style: TextStyle( - fontSize: fontSize + 3, + fontSize: fontSize + 4, color: Color(0xffD80000), - fontWeight: FontWeight.w500, + fontWeight: FontWeight.w600, ), ), ), ), ), + // const Spacer(), + SizedBox(height: isTall ? 90 : 60), ]), ); } diff --git a/pubspec.yaml b/pubspec.yaml index fac9f3ed..d9c8502f 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -5,7 +5,7 @@ description: Pay with G1. # pub.dev using `pub publish`. This is preferred for private packages. publish_to: 'none' # Remove this line if you wish to publish to pub.dev -version: 0.0.7+3 +version: 0.0.7+4 environment: sdk: '>=2.12.0 <3.0.0' -- GitLab