Refactoring of payment workflow UX
This commit is contained in:
parent
0009fc4009
commit
3672f4cd94
|
@ -63,10 +63,11 @@ class MyWalletsProvider with ChangeNotifier {
|
||||||
return _targetedWallet;
|
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();
|
||||||
int? defaultWalletNumber = chestBox.get(chest)!.defaultWallet;
|
int? defaultWalletNumber = chestBox.get(chest)!.defaultWallet;
|
||||||
return getWalletData([chest, defaultWalletNumber]);
|
return getWalletData([chest, defaultWalletNumber]);
|
||||||
}
|
}
|
||||||
|
|
|
@ -27,6 +27,7 @@ class SubstrateSdk with ChangeNotifier {
|
||||||
int blocNumber = 0;
|
int blocNumber = 0;
|
||||||
bool isLoadingEndpoint = false;
|
bool isLoadingEndpoint = false;
|
||||||
String debugConnection = '';
|
String debugConnection = '';
|
||||||
|
String transactionStatus = '';
|
||||||
|
|
||||||
TextEditingController jsonKeystore = TextEditingController();
|
TextEditingController jsonKeystore = TextEditingController();
|
||||||
TextEditingController keystorePassword = TextEditingController();
|
TextEditingController keystorePassword = TextEditingController();
|
||||||
|
@ -299,6 +300,8 @@ class SubstrateSdk with ChangeNotifier {
|
||||||
required String destAddress,
|
required String destAddress,
|
||||||
required double amount,
|
required double amount,
|
||||||
required String password}) async {
|
required String password}) async {
|
||||||
|
transactionStatus = '';
|
||||||
|
|
||||||
setCurrentWallet(fromAddress);
|
setCurrentWallet(fromAddress);
|
||||||
|
|
||||||
log.d(keyring.current.address);
|
log.d(keyring.current.address);
|
||||||
|
@ -317,15 +320,31 @@ class SubstrateSdk with ChangeNotifier {
|
||||||
[destAddress, amount * 100],
|
[destAddress, amount * 100],
|
||||||
password,
|
password,
|
||||||
onStatusChange: (status) {
|
onStatusChange: (status) {
|
||||||
print('status: ' + status);
|
log.d('Transaction status: ' + status);
|
||||||
if (status == 'Ready') {
|
if (status == 'Ready') {
|
||||||
snack(context, 'Transaction terminé');
|
transactionStatus = 'sent';
|
||||||
|
notifyListeners();
|
||||||
|
// snack(context, 'Transaction terminé');
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
).timeout(
|
||||||
|
const Duration(seconds: 12),
|
||||||
|
onTimeout: () => {},
|
||||||
);
|
);
|
||||||
print(hash.toString());
|
print(hash.toString());
|
||||||
return 'confirmed';
|
if (hash.isEmpty) {
|
||||||
|
transactionStatus = 'timeout';
|
||||||
|
notifyListeners();
|
||||||
|
|
||||||
|
return 'timeout';
|
||||||
|
} else {
|
||||||
|
transactionStatus = hash.toString();
|
||||||
|
notifyListeners();
|
||||||
|
return hash.toString();
|
||||||
|
}
|
||||||
} catch (e) {
|
} catch (e) {
|
||||||
|
transactionStatus = e.toString();
|
||||||
|
notifyListeners();
|
||||||
return e.toString();
|
return e.toString();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -275,8 +275,7 @@ Widget geckHome(context) {
|
||||||
height: 68 * ratio)),
|
height: 68 * ratio)),
|
||||||
onTap: () {
|
onTap: () {
|
||||||
WalletData? defaultWallet =
|
WalletData? defaultWallet =
|
||||||
_myWalletProvider.getDefaultWallet(
|
_myWalletProvider.getDefaultWallet();
|
||||||
configBox.get('currentChest'));
|
|
||||||
Navigator.push(
|
Navigator.push(
|
||||||
context,
|
context,
|
||||||
MaterialPageRoute(
|
MaterialPageRoute(
|
||||||
|
|
|
@ -115,7 +115,7 @@ class _ChooseChestState extends State<ChooseChest> {
|
||||||
onPressed: () {
|
onPressed: () {
|
||||||
configBox.put('currentChest', currentChest);
|
configBox.put('currentChest', currentChest);
|
||||||
WalletData? defaultWallet =
|
WalletData? defaultWallet =
|
||||||
_myWalletProvider.getDefaultWallet(currentChest);
|
_myWalletProvider.getDefaultWallet();
|
||||||
_myWalletProvider.rebuildWidget();
|
_myWalletProvider.rebuildWidget();
|
||||||
Navigator.pushAndRemoveUntil(
|
Navigator.pushAndRemoveUntil(
|
||||||
context,
|
context,
|
||||||
|
|
|
@ -50,17 +50,7 @@ class ChooseWalletScreen extends StatelessWidget {
|
||||||
onPressed: () async {
|
onPressed: () async {
|
||||||
Navigator.pop(context);
|
Navigator.pop(context);
|
||||||
Navigator.pop(context);
|
Navigator.pop(context);
|
||||||
// Payment workflow !
|
Navigator.pop(context);
|
||||||
// final acc = _sub.getCurrentWallet();
|
|
||||||
// log.d(
|
|
||||||
// "fromAddress: ${acc.address!},destAddress: ${_walletViewProvider.outputPubkey.text}, amount: ${double.parse(_walletViewProvider.payAmount.text)}, password: $pin");
|
|
||||||
// final resultPay = await _sub.pay(context,
|
|
||||||
// fromAddress: acc.address!,
|
|
||||||
// destAddress: _walletViewProvider.outputPubkey.text,
|
|
||||||
// amount:
|
|
||||||
// double.parse(_walletViewProvider.payAmount.text),
|
|
||||||
// password: pin.toUpperCase());
|
|
||||||
// await paymentsResult(context, resultPay);
|
|
||||||
},
|
},
|
||||||
child: const Text(
|
child: const Text(
|
||||||
'Choisir ce portefeuille',
|
'Choisir ce portefeuille',
|
||||||
|
@ -85,7 +75,7 @@ class ChooseWalletScreen extends StatelessWidget {
|
||||||
Provider.of<WalletsProfilesProvider>(context, listen: false);
|
Provider.of<WalletsProfilesProvider>(context, listen: false);
|
||||||
|
|
||||||
WalletData? defaultWallet =
|
WalletData? defaultWallet =
|
||||||
_myWalletProvider.getDefaultWallet(currentChest);
|
_myWalletProvider.getDefaultWallet();
|
||||||
|
|
||||||
_selectedId ??= defaultWallet!.id();
|
_selectedId ??= defaultWallet!.id();
|
||||||
_derivation ??= defaultWallet!.derivation!;
|
_derivation ??= defaultWallet!.derivation!;
|
||||||
|
@ -205,8 +195,10 @@ class ChooseWalletScreen extends StatelessWidget {
|
||||||
_selectedId = _repository.id();
|
_selectedId = _repository.id();
|
||||||
chestBox.get(currentChest)!.defaultWallet =
|
chestBox.get(currentChest)!.defaultWallet =
|
||||||
_repository.number;
|
_repository.number;
|
||||||
|
|
||||||
_sub.setCurrentWallet(_repository.address!);
|
_sub.setCurrentWallet(_repository.address!);
|
||||||
// _myWalletProvider.rebuildWidget();
|
_myWalletProvider.rebuildWidget();
|
||||||
|
_walletViewProvider.reload();
|
||||||
_sub.reload();
|
_sub.reload();
|
||||||
},
|
},
|
||||||
)
|
)
|
||||||
|
@ -218,34 +210,3 @@ class ChooseWalletScreen extends StatelessWidget {
|
||||||
]);
|
]);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
Future<bool?> paymentsResult(context, String resultPay) {
|
|
||||||
final bool isValid = resultPay == "confirmed";
|
|
||||||
if (!isValid) log.e(resultPay);
|
|
||||||
|
|
||||||
return showDialog<bool>(
|
|
||||||
context: context,
|
|
||||||
barrierDismissible: true, // user must tap button!
|
|
||||||
builder: (BuildContext context) {
|
|
||||||
return AlertDialog(
|
|
||||||
title: Text(isValid
|
|
||||||
? 'Paiement effecuté avec succès !'
|
|
||||||
: "Une erreur s'est produite lors du paiement:\n$resultPay"),
|
|
||||||
content: const SingleChildScrollView(child: Text('')),
|
|
||||||
actions: <Widget>[
|
|
||||||
TextButton(
|
|
||||||
child: const Text("OK"),
|
|
||||||
onPressed: () async {
|
|
||||||
isValid
|
|
||||||
? await Navigator.of(context).pushNamedAndRemoveUntil(
|
|
||||||
'/',
|
|
||||||
ModalRoute.withName('/'),
|
|
||||||
)
|
|
||||||
: Navigator.pop(context);
|
|
||||||
},
|
|
||||||
),
|
|
||||||
],
|
|
||||||
);
|
|
||||||
},
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
|
@ -164,10 +164,8 @@ class ConfirmStoreWallet extends StatelessWidget with ChangeNotifier {
|
||||||
Navigator.pushAndRemoveUntil(context,
|
Navigator.pushAndRemoveUntil(context,
|
||||||
MaterialPageRoute(builder: (context) {
|
MaterialPageRoute(builder: (context) {
|
||||||
return UnlockingWallet(
|
return UnlockingWallet(
|
||||||
wallet:
|
wallet: _myWalletProvider
|
||||||
_myWalletProvider.getDefaultWallet(
|
.getDefaultWallet(),
|
||||||
configBox.get('currentChest'),
|
|
||||||
),
|
|
||||||
action: "mywallets",
|
action: "mywallets",
|
||||||
);
|
);
|
||||||
}), ModalRoute.withName('/'));
|
}), ModalRoute.withName('/'));
|
||||||
|
|
|
@ -8,9 +8,11 @@ import 'package:gecko/providers/my_wallets.dart';
|
||||||
import 'package:gecko/models/wallet_data.dart';
|
import 'package:gecko/models/wallet_data.dart';
|
||||||
import 'package:gecko/providers/wallet_options.dart';
|
import 'package:gecko/providers/wallet_options.dart';
|
||||||
import 'package:flutter/material.dart';
|
import 'package:flutter/material.dart';
|
||||||
|
import 'package:gecko/providers/wallets_profiles.dart';
|
||||||
import 'package:gecko/screens/myWallets/choose_chest.dart';
|
import 'package:gecko/screens/myWallets/choose_chest.dart';
|
||||||
import 'package:gecko/screens/myWallets/choose_wallet.dart';
|
import 'package:gecko/screens/myWallets/choose_wallet.dart';
|
||||||
import 'package:gecko/screens/myWallets/wallets_home.dart';
|
import 'package:gecko/screens/myWallets/wallets_home.dart';
|
||||||
|
import 'package:gecko/screens/transaction_in_progress.dart';
|
||||||
import 'package:pin_code_fields/pin_code_fields.dart';
|
import 'package:pin_code_fields/pin_code_fields.dart';
|
||||||
import 'package:provider/provider.dart';
|
import 'package:provider/provider.dart';
|
||||||
import 'package:gecko/globals.dart';
|
import 'package:gecko/globals.dart';
|
||||||
|
@ -231,10 +233,26 @@ class UnlockingWallet extends StatelessWidget {
|
||||||
);
|
);
|
||||||
break;
|
break;
|
||||||
case "pay":
|
case "pay":
|
||||||
|
// Navigator.pop(context);
|
||||||
|
// Navigator.pop(context);
|
||||||
|
// Payment workflow !
|
||||||
|
WalletsProfilesProvider _walletViewProvider =
|
||||||
|
Provider.of<WalletsProfilesProvider>(context,
|
||||||
|
listen: false);
|
||||||
|
final acc = _sub.getCurrentWallet();
|
||||||
|
log.d(
|
||||||
|
"fromAddress: ${acc.address!},destAddress: ${_walletViewProvider.outputPubkey.text}, amount: ${double.parse(_walletViewProvider.payAmount.text)}, password: $_pin");
|
||||||
|
_sub.pay(context,
|
||||||
|
fromAddress: acc.address!,
|
||||||
|
destAddress: _walletViewProvider.outputPubkey.text,
|
||||||
|
amount:
|
||||||
|
double.parse(_walletViewProvider.payAmount.text),
|
||||||
|
password: _pin.toUpperCase());
|
||||||
|
// await paymentsResult(context, resultPay);
|
||||||
Navigator.push(
|
Navigator.push(
|
||||||
context,
|
context,
|
||||||
MaterialPageRoute(builder: (context) {
|
MaterialPageRoute(builder: (context) {
|
||||||
return ChooseWalletScreen(
|
return TransactionInProgress(
|
||||||
chest: currentChestNumber, pin: _pin.toUpperCase());
|
chest: currentChestNumber, pin: _pin.toUpperCase());
|
||||||
}),
|
}),
|
||||||
);
|
);
|
||||||
|
|
|
@ -29,7 +29,7 @@ class WalletOptions extends StatelessWidget {
|
||||||
|
|
||||||
final int _currentChest = _myWalletProvider.getCurrentChest()!;
|
final int _currentChest = _myWalletProvider.getCurrentChest()!;
|
||||||
|
|
||||||
// final currentWallet = _myWalletProvider.getDefaultWallet(_currentChest);
|
// final currentWallet = _myWalletProvider.getDefaultWallet();
|
||||||
// log.d(_walletOptions.getAddress(_currentChest, 3));
|
// log.d(_walletOptions.getAddress(_currentChest, 3));
|
||||||
log.d("Wallet options: $_currentChest:${wallet.derivation}");
|
log.d("Wallet options: $_currentChest:${wallet.derivation}");
|
||||||
|
|
||||||
|
@ -336,7 +336,7 @@ class WalletOptions extends StatelessWidget {
|
||||||
WalletOptionsProvider _walletOptions,
|
WalletOptionsProvider _walletOptions,
|
||||||
int _currentChest) {
|
int _currentChest) {
|
||||||
WalletData defaultWallet =
|
WalletData defaultWallet =
|
||||||
_myWalletProvider.getDefaultWallet(_currentChest)!;
|
_myWalletProvider.getDefaultWallet()!;
|
||||||
|
|
||||||
_walletOptions.isDefaultWallet = (defaultWallet.number == wallet.id()[1]);
|
_walletOptions.isDefaultWallet = (defaultWallet.number == wallet.id()[1]);
|
||||||
|
|
||||||
|
|
|
@ -155,7 +155,7 @@ class WalletsHome extends StatelessWidget {
|
||||||
|
|
||||||
List _listWallets = _myWalletProvider.listWallets;
|
List _listWallets = _myWalletProvider.listWallets;
|
||||||
WalletData? defaultWallet =
|
WalletData? defaultWallet =
|
||||||
_myWalletProvider.getDefaultWallet(configBox.get('currentChest'));
|
_myWalletProvider.getDefaultWallet();
|
||||||
final double screenWidth = MediaQuery.of(context).size.width;
|
final double screenWidth = MediaQuery.of(context).size.width;
|
||||||
int nTule = 2;
|
int nTule = 2;
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,184 @@
|
||||||
|
import 'package:flutter/services.dart';
|
||||||
|
import 'package:gecko/globals.dart';
|
||||||
|
import 'package:flutter/material.dart';
|
||||||
|
import 'package:gecko/providers/my_wallets.dart';
|
||||||
|
import 'package:gecko/providers/substrate_sdk.dart';
|
||||||
|
import 'package:gecko/providers/wallets_profiles.dart';
|
||||||
|
import 'package:provider/provider.dart';
|
||||||
|
// import 'package:gecko/models/home.dart';
|
||||||
|
// import 'package:provider/provider.dart';
|
||||||
|
|
||||||
|
// ignore: must_be_immutable
|
||||||
|
class TransactionInProgress extends StatelessWidget {
|
||||||
|
const TransactionInProgress(
|
||||||
|
{Key? key, required this.chest, required this.pin})
|
||||||
|
: super(key: key);
|
||||||
|
final int chest;
|
||||||
|
final String pin;
|
||||||
|
|
||||||
|
@override
|
||||||
|
Widget build(BuildContext context) {
|
||||||
|
SystemChrome.setPreferredOrientations([DeviceOrientation.portraitUp]);
|
||||||
|
SubstrateSdk _sub = Provider.of<SubstrateSdk>(context, listen: true);
|
||||||
|
WalletsProfilesProvider _walletViewProvider =
|
||||||
|
Provider.of<WalletsProfilesProvider>(context, listen: false);
|
||||||
|
MyWalletsProvider _myWalletProvider =
|
||||||
|
Provider.of<MyWalletsProvider>(context, listen: false);
|
||||||
|
|
||||||
|
String _resultText;
|
||||||
|
bool isLoading = true;
|
||||||
|
// Map jsonResult;
|
||||||
|
final _result = _sub.transactionStatus;
|
||||||
|
|
||||||
|
final from = _myWalletProvider.getDefaultWallet()!.name!;
|
||||||
|
final to = _walletViewProvider
|
||||||
|
.getShortPubkey(_walletViewProvider.outputPubkey.text);
|
||||||
|
final amount = _walletViewProvider.payAmount.text;
|
||||||
|
|
||||||
|
switch (_result) {
|
||||||
|
case '':
|
||||||
|
{
|
||||||
|
_resultText = 'Envoi en cours ...';
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case 'sent':
|
||||||
|
{
|
||||||
|
_resultText = 'En cours de validation ...';
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
{
|
||||||
|
isLoading = false;
|
||||||
|
// jsonResult = json.decode(_result);
|
||||||
|
log.d(_result);
|
||||||
|
if (_result.contains('blockHash: ')) {
|
||||||
|
_resultText = 'Transcation validé !';
|
||||||
|
} else {
|
||||||
|
_resultText = "Une erreur s'est produite:\n\n$_result";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return WillPopScope(
|
||||||
|
onWillPop: () {
|
||||||
|
_sub.transactionStatus = '';
|
||||||
|
Navigator.pop(context);
|
||||||
|
Navigator.pop(context);
|
||||||
|
Navigator.pop(context);
|
||||||
|
return Future<bool>.value(true);
|
||||||
|
},
|
||||||
|
child: Scaffold(
|
||||||
|
appBar: AppBar(
|
||||||
|
toolbarHeight: 60 * ratio,
|
||||||
|
elevation: 0,
|
||||||
|
automaticallyImplyLeading: false,
|
||||||
|
title: SizedBox(
|
||||||
|
height: 22,
|
||||||
|
child: Row(
|
||||||
|
mainAxisAlignment: MainAxisAlignment.center,
|
||||||
|
children: const <Widget>[Text('Transaction en cours')]),
|
||||||
|
)),
|
||||||
|
body: SafeArea(
|
||||||
|
child: Align(
|
||||||
|
alignment: FractionalOffset.bottomCenter,
|
||||||
|
child: Column(children: <Widget>[
|
||||||
|
Container(
|
||||||
|
width: double.infinity,
|
||||||
|
decoration: BoxDecoration(
|
||||||
|
gradient: LinearGradient(
|
||||||
|
begin: Alignment.topCenter,
|
||||||
|
end: Alignment.bottomCenter,
|
||||||
|
colors: [
|
||||||
|
yellowC,
|
||||||
|
const Color(0xfffafafa),
|
||||||
|
],
|
||||||
|
)),
|
||||||
|
child: Column(children: <Widget>[
|
||||||
|
const SizedBox(height: 10),
|
||||||
|
Text(
|
||||||
|
'$amount $currencyName',
|
||||||
|
textAlign: TextAlign.center,
|
||||||
|
style: const TextStyle(
|
||||||
|
fontSize: 18, fontWeight: FontWeight.w600),
|
||||||
|
),
|
||||||
|
const SizedBox(height: 10),
|
||||||
|
const Text(
|
||||||
|
'de',
|
||||||
|
textAlign: TextAlign.center,
|
||||||
|
style: TextStyle(fontSize: 18),
|
||||||
|
),
|
||||||
|
Text(
|
||||||
|
from,
|
||||||
|
textAlign: TextAlign.center,
|
||||||
|
style: const TextStyle(
|
||||||
|
fontSize: 18, fontWeight: FontWeight.w600),
|
||||||
|
),
|
||||||
|
const SizedBox(height: 10),
|
||||||
|
const Text(
|
||||||
|
'vers',
|
||||||
|
textAlign: TextAlign.center,
|
||||||
|
style: TextStyle(fontSize: 18),
|
||||||
|
),
|
||||||
|
Text(
|
||||||
|
to,
|
||||||
|
textAlign: TextAlign.center,
|
||||||
|
style: const TextStyle(
|
||||||
|
fontSize: 18, fontWeight: FontWeight.w600),
|
||||||
|
),
|
||||||
|
const SizedBox(height: 20),
|
||||||
|
]),
|
||||||
|
),
|
||||||
|
// const SizedBox(height: 20, width: double.infinity),
|
||||||
|
const Spacer(),
|
||||||
|
Row(mainAxisAlignment: MainAxisAlignment.center, children: [
|
||||||
|
Text(
|
||||||
|
_resultText,
|
||||||
|
textAlign: TextAlign.center,
|
||||||
|
style: TextStyle(fontSize: 19 * ratio),
|
||||||
|
),
|
||||||
|
Visibility(
|
||||||
|
visible: isLoading,
|
||||||
|
child: SizedBox(
|
||||||
|
height: 15,
|
||||||
|
width: 15,
|
||||||
|
child: CircularProgressIndicator(
|
||||||
|
color: orangeC,
|
||||||
|
strokeWidth: 2,
|
||||||
|
),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
]),
|
||||||
|
const Spacer(),
|
||||||
|
Expanded(
|
||||||
|
child: Align(
|
||||||
|
alignment: Alignment.bottomCenter,
|
||||||
|
child: SizedBox(
|
||||||
|
width: 380 * ratio,
|
||||||
|
height: 60 * ratio,
|
||||||
|
child: ElevatedButton(
|
||||||
|
style: ElevatedButton.styleFrom(
|
||||||
|
elevation: 4,
|
||||||
|
primary: orangeC, // background
|
||||||
|
onPrimary: Colors.white, // foreground
|
||||||
|
),
|
||||||
|
onPressed: () {
|
||||||
|
Navigator.pop(context);
|
||||||
|
Navigator.pop(context);
|
||||||
|
Navigator.pop(context);
|
||||||
|
},
|
||||||
|
child: Text(
|
||||||
|
'Fermer',
|
||||||
|
style: TextStyle(
|
||||||
|
fontSize: 23 * ratio,
|
||||||
|
fontWeight: FontWeight.w600),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
SizedBox(height: isTall ? 80 : 20)
|
||||||
|
])),
|
||||||
|
),
|
||||||
|
));
|
||||||
|
}
|
||||||
|
}
|
|
@ -184,16 +184,18 @@ class WalletViewScreen extends StatelessWidget {
|
||||||
|
|
||||||
void paymentPopup(
|
void paymentPopup(
|
||||||
BuildContext context, WalletsProfilesProvider _walletViewProvider) {
|
BuildContext context, WalletsProfilesProvider _walletViewProvider) {
|
||||||
WalletsProfilesProvider _walletViewProvider =
|
// WalletsProfilesProvider _walletViewProvider =
|
||||||
Provider.of<WalletsProfilesProvider>(context, listen: false);
|
// Provider.of<WalletsProfilesProvider>(context, listen: false);
|
||||||
|
|
||||||
MyWalletsProvider _myWalletProvider =
|
MyWalletsProvider _myWalletProvider =
|
||||||
Provider.of<MyWalletsProvider>(context, listen: false);
|
Provider.of<MyWalletsProvider>(context, listen: false);
|
||||||
// SubstrateSdk _sub = Provider.of<SubstrateSdk>(context, listen: false);
|
// SubstrateSdk _sub = Provider.of<SubstrateSdk>(context, listen: false);
|
||||||
|
|
||||||
const double shapeSize = 20;
|
const double shapeSize = 20;
|
||||||
WalletData? defaultWallet =
|
WalletData? defaultWallet = _myWalletProvider.getDefaultWallet();
|
||||||
_myWalletProvider.getDefaultWallet(configBox.get('currentChest'));
|
|
||||||
|
bool canValidate = false;
|
||||||
|
|
||||||
_walletViewProvider.outputPubkey.text = pubkey!;
|
_walletViewProvider.outputPubkey.text = pubkey!;
|
||||||
|
|
||||||
showModalBottomSheet<void>(
|
showModalBottomSheet<void>(
|
||||||
|
@ -208,6 +210,15 @@ class WalletViewScreen extends StatelessWidget {
|
||||||
builder: (BuildContext context) {
|
builder: (BuildContext context) {
|
||||||
return StatefulBuilder(
|
return StatefulBuilder(
|
||||||
builder: (BuildContext context, StateSetter setState) {
|
builder: (BuildContext context, StateSetter setState) {
|
||||||
|
if (_walletViewProvider.payAmount.text != '' &&
|
||||||
|
double.parse(_walletViewProvider.payAmount.text) <=
|
||||||
|
double.parse(
|
||||||
|
balanceCache[defaultWallet!.address]!.split(' ')[0]) &&
|
||||||
|
_walletViewProvider.pubkey != defaultWallet.address) {
|
||||||
|
canValidate = true;
|
||||||
|
} else {
|
||||||
|
canValidate = false;
|
||||||
|
}
|
||||||
return Padding(
|
return Padding(
|
||||||
padding: EdgeInsets.only(
|
padding: EdgeInsets.only(
|
||||||
bottom: MediaQuery.of(context).viewInsets.bottom),
|
bottom: MediaQuery.of(context).viewInsets.bottom),
|
||||||
|
@ -251,7 +262,8 @@ class WalletViewScreen extends StatelessWidget {
|
||||||
MaterialPageRoute(
|
MaterialPageRoute(
|
||||||
builder: (context) {
|
builder: (context) {
|
||||||
return UnlockingWallet(
|
return UnlockingWallet(
|
||||||
wallet: defaultWallet, action: "pay");
|
wallet: defaultWallet,
|
||||||
|
action: "changeWallet");
|
||||||
},
|
},
|
||||||
),
|
),
|
||||||
);
|
);
|
||||||
|
@ -265,8 +277,8 @@ class WalletViewScreen extends StatelessWidget {
|
||||||
// BorderSide(color: Colors.grey[500], width: 2),
|
// BorderSide(color: Colors.grey[500], width: 2),
|
||||||
// borderRadius: BorderRadius.circular(8)),
|
// borderRadius: BorderRadius.circular(8)),
|
||||||
border: Border.all(
|
border: Border.all(
|
||||||
color:
|
color: Colors.blueAccent
|
||||||
Colors.grey[500]!, // Set border color
|
.shade200, // Set border color
|
||||||
width: 2), // Set border width
|
width: 2), // Set border width
|
||||||
borderRadius: const BorderRadius.all(
|
borderRadius: const BorderRadius.all(
|
||||||
Radius.circular(10.0)), // Set ro
|
Radius.circular(10.0)), // Set ro
|
||||||
|
@ -376,7 +388,7 @@ class WalletViewScreen extends StatelessWidget {
|
||||||
primary: orangeC, // background
|
primary: orangeC, // background
|
||||||
onPrimary: Colors.white, // foreground
|
onPrimary: Colors.white, // foreground
|
||||||
),
|
),
|
||||||
onPressed: _walletViewProvider.payAmount.text != ''
|
onPressed: canValidate
|
||||||
? () {
|
? () {
|
||||||
Navigator.push(
|
Navigator.push(
|
||||||
context,
|
context,
|
||||||
|
|
Loading…
Reference in New Issue