Dynamic home message; improve node statut UX

This commit is contained in:
poka 2022-05-29 04:30:03 +02:00
parent 488435405c
commit cd6c3e9c70
11 changed files with 116 additions and 116 deletions

Binary file not shown.

Before

Width:  |  Height:  |  Size: 5.6 KiB

After

Width:  |  Height:  |  Size: 6.8 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 6.8 KiB

After

Width:  |  Height:  |  Size: 5.6 KiB

View File

@ -8,7 +8,7 @@ import 'package:logger/logger.dart';
import 'package:shared_preferences/shared_preferences.dart'; import 'package:shared_preferences/shared_preferences.dart';
// Version of box data // Version of box data
const int dataVersion = 2; const int dataVersion = 3;
// Files paths // Files paths
Directory? appPath; Directory? appPath;

View File

@ -26,6 +26,7 @@ class HomeProvider with ChangeNotifier {
Widget appBarTitle = Text('Ğecko', style: TextStyle(color: Colors.grey[850])); Widget appBarTitle = Text('Ğecko', style: TextStyle(color: Colors.grey[850]));
Widget appBarExplorer = Widget appBarExplorer =
Text('Explorateur', style: TextStyle(color: Colors.grey[850])); Text('Explorateur', style: TextStyle(color: Colors.grey[850]));
String homeMessage = "y'a pas de lézard ;-)";
Future<void> initHive() async { Future<void> initHive() async {
late Directory hivePath; late Directory hivePath;
@ -71,6 +72,15 @@ class HomeProvider with ChangeNotifier {
return version + '+' + buildNumber; 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 { Future<List?> getValidEndpoints() async {
await configBox.delete('endpoint'); await configBox.delete('endpoint');

View File

@ -41,7 +41,7 @@ class MyWalletsProvider with ChangeNotifier {
return listWallets; return listWallets;
} }
WalletData? getWalletData(List<int?> _id) { WalletData? getWalletDataById(List<int?> _id) {
if (_id.isEmpty) return WalletData(); if (_id.isEmpty) return WalletData();
int? _chest = _id[0]; int? _chest = _id[0];
int? _nbr = _id[1]; int? _nbr = _id[1];
@ -57,13 +57,26 @@ class MyWalletsProvider with ChangeNotifier {
return _targetedWallet; 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]) { WalletData? getDefaultWallet([int? chest]) {
if (chestBox.isEmpty) { if (chestBox.isEmpty) {
return WalletData(chest: 0, number: 0); return WalletData(chest: 0, number: 0);
} else { } else {
chest ??= getCurrentChest(); chest ??= getCurrentChest();
int? defaultWalletNumber = chestBox.get(chest)!.defaultWallet; int? defaultWalletNumber = chestBox.get(chest)!.defaultWallet;
return getWalletData([chest, defaultWalletNumber]); return getWalletDataById([chest, defaultWalletNumber]);
} }
} }

View File

@ -5,6 +5,7 @@ import 'package:flutter/services.dart';
import 'package:gecko/globals.dart'; import 'package:gecko/globals.dart';
import 'package:gecko/models/chest_data.dart'; import 'package:gecko/models/chest_data.dart';
import 'package:gecko/models/wallet_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/apiKeyring.dart';
import 'package:polkawallet_sdk/api/types/networkParams.dart'; import 'package:polkawallet_sdk/api/types/networkParams.dart';
import 'package:polkawallet_sdk/api/types/txInfoData.dart'; import 'package:polkawallet_sdk/api/types/txInfoData.dart';
@ -46,6 +47,7 @@ class SubstrateSdk with ChangeNotifier {
Future<void> connectNode(BuildContext ctx) async { Future<void> connectNode(BuildContext ctx) async {
List<NetworkParams> node = []; List<NetworkParams> node = [];
HomeProvider _homeProvider = Provider.of<HomeProvider>(ctx, listen: false);
for (String _endpoint in configBox.get('endpoint')) { for (String _endpoint in configBox.get('endpoint')) {
final n = NetworkParams(); final n = NetworkParams();
@ -98,12 +100,14 @@ class SubstrateSdk with ChangeNotifier {
notifyListeners(); notifyListeners();
}); });
notifyListeners(); notifyListeners();
snackNode(ctx, true); _homeProvider.changeMessage('Vous êtes bien connecté', 3);
// snackNode(ctx, true);
} else { } else {
nodeConnected = false; nodeConnected = false;
debugConnection = res.toString(); debugConnection = res.toString();
notifyListeners(); notifyListeners();
snackNode(ctx, false); _homeProvider.changeMessage('Vous êtes pas connecté', 3);
// snackNode(ctx, false);
} }
log.d(sdk.api.connectedNode?.endpoint); log.d(sdk.api.connectedNode?.endpoint);

View File

@ -31,7 +31,7 @@ class WalletOptionsProvider with ChangeNotifier {
{required bool isCesium}) async { {required bool isCesium}) async {
MyWalletsProvider myWalletClass = MyWalletsProvider(); MyWalletsProvider myWalletClass = MyWalletsProvider();
WalletData _walletTarget = myWalletClass.getWalletData(_walletID)!; WalletData _walletTarget = myWalletClass.getWalletDataById(_walletID)!;
_walletTarget.name = _newName; _walletTarget.name = _newName;
await walletBox.put(_walletTarget.key, _walletTarget); await walletBox.put(_walletTarget.key, _walletTarget);
@ -214,6 +214,9 @@ class WalletOptionsProvider with ChangeNotifier {
TextButton( TextButton(
child: const Text("Valider"), child: const Text("Valider"),
onPressed: () async { onPressed: () async {
final _wallet =
_myWalletProvider.getWalletDataByAddress(address.text);
await _sub.setCurrentWallet(_wallet!);
_sub.confirmIdentity(_walletOptions.address.text, idtyName.text, _sub.confirmIdentity(_walletOptions.address.text, idtyName.text,
_myWalletProvider.pinCode); _myWalletProvider.pinCode);
Navigator.pop(context); Navigator.pop(context);

View File

@ -2,6 +2,7 @@ import 'package:bubble/bubble.dart';
import 'package:gecko/globals.dart'; import 'package:gecko/globals.dart';
import 'package:gecko/models/stateful_wrapper.dart'; import 'package:gecko/models/stateful_wrapper.dart';
import 'package:gecko/providers/chest_provider.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/substrate_sdk.dart';
import 'package:gecko/providers/wallets_profiles.dart'; import 'package:gecko/providers/wallets_profiles.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
@ -23,7 +24,6 @@ class HomeScreen extends StatelessWidget {
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
SystemChrome.setPreferredOrientations([DeviceOrientation.portraitUp]); SystemChrome.setPreferredOrientations([DeviceOrientation.portraitUp]);
// HomeProvider _homeProvider = Provider.of<HomeProvider>(context);
MyWalletsProvider _myWalletProvider = MyWalletsProvider _myWalletProvider =
Provider.of<MyWalletsProvider>(context); Provider.of<MyWalletsProvider>(context);
Provider.of<ChestProvider>(context); Provider.of<ChestProvider>(context);
@ -103,6 +103,7 @@ class HomeScreen extends StatelessWidget {
WidgetsBinding.instance.addPostFrameCallback((_) async { WidgetsBinding.instance.addPostFrameCallback((_) async {
if (!_sub.sdkReady && !_sub.sdkLoading) await _sub.initApi(); if (!_sub.sdkReady && !_sub.sdkLoading) await _sub.initApi();
if (_sub.sdkReady && !_sub.nodeConnected) { if (_sub.sdkReady && !_sub.nodeConnected) {
// Check if versionData non compatible, drop everything
if (walletBox.isNotEmpty && if (walletBox.isNotEmpty &&
walletBox.getAt(0)!.version! < dataVersion) { walletBox.getAt(0)!.version! < dataVersion) {
await infoPopup(context, await infoPopup(context,
@ -185,31 +186,32 @@ Widget geckHome(context) {
]), ]),
Padding( Padding(
padding: EdgeInsets.only(top: 15 * ratio), padding: EdgeInsets.only(top: 15 * ratio),
child: Row( child:
mainAxisAlignment: MainAxisAlignment.center, Row(mainAxisAlignment: MainAxisAlignment.center, children: <Widget>[
children: const <Widget>[ Consumer<HomeProvider>(builder: (context, _homeP, _) {
Text( return Text(
"y'a pas de lézard ;-)", _homeP.homeMessage,
textAlign: TextAlign.center, textAlign: TextAlign.center,
style: TextStyle( style: const TextStyle(
color: Colors.white, color: Colors.white,
fontSize: 24, fontSize: 24,
fontWeight: FontWeight.w700, fontWeight: FontWeight.w700,
shadows: <Shadow>[ shadows: <Shadow>[
Shadow( Shadow(
offset: Offset(0, 0), offset: Offset(0, 0),
blurRadius: 20, blurRadius: 20,
color: Colors.black, color: Colors.black,
), ),
Shadow( Shadow(
offset: Offset(0, 0), offset: Offset(0, 0),
blurRadius: 20, blurRadius: 20,
color: Colors.black, color: Colors.black,
), ),
], ],
),
), ),
]), );
}),
]),
), ),
const SizedBox(height: 15), const SizedBox(height: 15),
Expanded( Expanded(

View File

@ -126,7 +126,7 @@ class WalletOptions extends StatelessWidget {
historyWidget( historyWidget(
context, _historyProvider, walletProvider), context, _historyProvider, walletProvider),
SizedBox(height: 12 * ratio), SizedBox(height: 12 * ratio),
setDefaultWallet(context, walletProvider, setDefaultWalletWidget(context, walletProvider,
_myWalletProvider, _walletOptions, _currentChest), _myWalletProvider, _walletOptions, _currentChest),
SizedBox(height: 17 * ratio), SizedBox(height: 17 * ratio),
if (!walletProvider.isDefaultWallet) if (!walletProvider.isDefaultWallet)
@ -349,25 +349,20 @@ class WalletOptions extends StatelessWidget {
); );
} }
Widget setDefaultWallet( Widget setDefaultWalletWidget(
BuildContext context, BuildContext context,
WalletOptionsProvider walletProvider, WalletOptionsProvider walletProvider,
MyWalletsProvider _myWalletProvider, MyWalletsProvider _myWalletProvider,
WalletOptionsProvider _walletOptions, WalletOptionsProvider _walletOptions,
int _currentChest) { int _currentChest) {
WalletData defaultWallet = _myWalletProvider.getDefaultWallet()!; WalletData defaultWallet = _myWalletProvider.getDefaultWallet()!;
SubstrateSdk _sub = Provider.of<SubstrateSdk>(context, listen: false);
_walletOptions.isDefaultWallet = (defaultWallet.number == wallet.id()[1]); _walletOptions.isDefaultWallet = (defaultWallet.number == wallet.id()[1]);
return InkWell( return InkWell(
key: const Key('setDefaultWallet'), key: const Key('setDefaultWallet'),
onTap: !walletProvider.isDefaultWallet onTap: !walletProvider.isDefaultWallet
? () async { ? () async {
defaultWallet = wallet; await setDefaultWallet(context, _currentChest);
await _sub.setCurrentWallet(wallet);
_myWalletProvider.readAllWallets(_currentChest);
_myWalletProvider.rebuildWidget();
} }
: null, : null,
child: SizedBox( 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( Widget deleteWallet(
BuildContext context, BuildContext context,
WalletOptionsProvider walletProvider, WalletOptionsProvider walletProvider,

View File

@ -4,10 +4,7 @@ import 'package:flutter/services.dart';
import 'package:gecko/providers/my_wallets.dart'; import 'package:gecko/providers/my_wallets.dart';
import 'package:gecko/providers/substrate_sdk.dart'; import 'package:gecko/providers/substrate_sdk.dart';
import 'dart:io'; import 'dart:io';
// import 'package:gecko/screens/myWallets/import_cesium_wallet.dart';
import 'package:gecko/globals.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'; import 'package:provider/provider.dart';
// ignore: must_be_immutable // ignore: must_be_immutable
@ -51,80 +48,42 @@ class SettingsScreen extends StatelessWidget {
children: <Widget>[ children: <Widget>[
const SizedBox(height: 60), const SizedBox(height: 60),
Row(children: [ 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, _) { Consumer<SubstrateSdk>(builder: (context, _sub, _) {
return _sub.isLoadingEndpoint return Expanded(
? CircularProgressIndicator(color: orangeC) child: Row(children: [
: IconButton( Text(' Noeud $currencyName :'),
icon: Icon( const Spacer(),
Icons.send, Icon(_sub.nodeConnected ? Icons.check : Icons.close),
color: orangeC, const Spacer(),
size: 40, SizedBox(
), width: 200,
onPressed: () async { height: 50,
configBox.put('endpoint', [_endpointController.text]); child: TextField(
await _sub.connectNode(context); 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: isTall ? 80 : 120),
SizedBox( const Spacer(),
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( SizedBox(
height: buttonHigh, height: buttonHigh,
width: buttonWidth, width: buttonWidth,
@ -138,14 +97,16 @@ class SettingsScreen extends StatelessWidget {
child: const Text( child: const Text(
'Oublier tous mes coffres', 'Oublier tous mes coffres',
style: TextStyle( style: TextStyle(
fontSize: fontSize + 3, fontSize: fontSize + 4,
color: Color(0xffD80000), color: Color(0xffD80000),
fontWeight: FontWeight.w500, fontWeight: FontWeight.w600,
), ),
), ),
), ),
), ),
), ),
// const Spacer(),
SizedBox(height: isTall ? 90 : 60),
]), ]),
); );
} }

View File

@ -5,7 +5,7 @@ description: Pay with G1.
# pub.dev using `pub publish`. This is preferred for private packages. # 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 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: environment:
sdk: '>=2.12.0 <3.0.0' sdk: '>=2.12.0 <3.0.0'