enh: refactor checks for wallets import (#40)
This commit is contained in:
parent
5718d170f3
commit
ee88042b0e
|
@ -0,0 +1,16 @@
|
||||||
|
import 'package:gecko/models/wallet_data.dart';
|
||||||
|
|
||||||
|
class MigrateWalletChecks {
|
||||||
|
final Map balance;
|
||||||
|
final IdtyStatus idtyStatus;
|
||||||
|
final bool isSmith;
|
||||||
|
final String validationStatus;
|
||||||
|
final bool canValidate;
|
||||||
|
|
||||||
|
const MigrateWalletChecks(
|
||||||
|
{required this.balance,
|
||||||
|
required this.idtyStatus,
|
||||||
|
required this.isSmith,
|
||||||
|
required this.validationStatus,
|
||||||
|
required this.canValidate});
|
||||||
|
}
|
|
@ -5,6 +5,7 @@ import 'package:flutter/foundation.dart';
|
||||||
import 'package:flutter/material.dart';
|
import 'package:flutter/material.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/migrate_wallet_checks.dart';
|
||||||
import 'package:gecko/models/wallet_data.dart';
|
import 'package:gecko/models/wallet_data.dart';
|
||||||
import 'package:gecko/providers/duniter_indexer.dart';
|
import 'package:gecko/providers/duniter_indexer.dart';
|
||||||
import 'package:gecko/providers/home.dart';
|
import 'package:gecko/providers/home.dart';
|
||||||
|
@ -886,12 +887,18 @@ class SubstrateSdk with ChangeNotifier {
|
||||||
return g1V1NewAddress;
|
return g1V1NewAddress;
|
||||||
}
|
}
|
||||||
|
|
||||||
Future<List> getBalanceAndIdtyStatus(
|
Future<MigrateWalletChecks> getBalanceAndIdtyStatus(
|
||||||
String fromAddress, String toAddress) async {
|
String fromAddress, String toAddress) async {
|
||||||
|
final sub = Provider.of<SubstrateSdk>(homeContext, listen: false);
|
||||||
|
bool canValidate = false;
|
||||||
|
String validationStatus = '';
|
||||||
|
|
||||||
final fromBalance = fromAddress == ''
|
final fromBalance = fromAddress == ''
|
||||||
? {'transferableBalance': 0}
|
? {'transferableBalance': 0}
|
||||||
: await getBalance(fromAddress);
|
: await getBalance(fromAddress);
|
||||||
|
|
||||||
|
final transferableBalance = fromBalance['transferableBalance'];
|
||||||
|
|
||||||
final statusList = await idtyStatus([fromAddress, toAddress]);
|
final statusList = await idtyStatus([fromAddress, toAddress]);
|
||||||
final fromIdtyStatus = statusList[0];
|
final fromIdtyStatus = statusList[0];
|
||||||
final fromHasConsumer =
|
final fromHasConsumer =
|
||||||
|
@ -899,13 +906,31 @@ class SubstrateSdk with ChangeNotifier {
|
||||||
final toIdtyStatus = statusList[1];
|
final toIdtyStatus = statusList[1];
|
||||||
final isSmithData = await isSmith(fromAddress);
|
final isSmithData = await isSmith(fromAddress);
|
||||||
|
|
||||||
return [
|
// Check conditions to set 'canValidate' and 'validationStatus'
|
||||||
fromBalance,
|
if (transferableBalance != 0 && !fromHasConsumer) {
|
||||||
fromIdtyStatus,
|
canValidate = true;
|
||||||
toIdtyStatus,
|
} else if (toIdtyStatus != IdtyStatus.none &&
|
||||||
fromHasConsumer,
|
fromIdtyStatus != IdtyStatus.none) {
|
||||||
isSmithData
|
validationStatus = 'youCannotMigrateIdentityToExistingIdentity'.tr();
|
||||||
];
|
} else if (isSmithData) {
|
||||||
|
validationStatus = 'smithCantMigrateIdentity'.tr();
|
||||||
|
} else if (fromHasConsumer) {
|
||||||
|
validationStatus = 'youMustWaitBeforeCashoutThisAccount'.tr();
|
||||||
|
} else if (transferableBalance == 0) {
|
||||||
|
validationStatus = 'thisAccountIsEmpty'.tr();
|
||||||
|
}
|
||||||
|
|
||||||
|
if (sub.g1V1NewAddress == '') {
|
||||||
|
validationStatus = '';
|
||||||
|
}
|
||||||
|
|
||||||
|
return MigrateWalletChecks(
|
||||||
|
balance: fromBalance,
|
||||||
|
idtyStatus: toIdtyStatus,
|
||||||
|
isSmith: isSmithData,
|
||||||
|
validationStatus: validationStatus,
|
||||||
|
canValidate: canValidate,
|
||||||
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
//////////////////////////////////////
|
//////////////////////////////////////
|
||||||
|
|
|
@ -5,6 +5,7 @@ import 'package:easy_localization/easy_localization.dart';
|
||||||
import 'package:flutter/services.dart';
|
import 'package:flutter/services.dart';
|
||||||
import 'package:gecko/globals.dart';
|
import 'package:gecko/globals.dart';
|
||||||
import 'package:flutter/material.dart';
|
import 'package:flutter/material.dart';
|
||||||
|
import 'package:gecko/models/migrate_wallet_checks.dart';
|
||||||
import 'package:gecko/models/scale_functions.dart';
|
import 'package:gecko/models/scale_functions.dart';
|
||||||
import 'package:gecko/models/wallet_data.dart';
|
import 'package:gecko/models/wallet_data.dart';
|
||||||
import 'package:gecko/models/widgets_keys.dart';
|
import 'package:gecko/models/widgets_keys.dart';
|
||||||
|
@ -29,8 +30,6 @@ class ImportG1v1 extends StatelessWidget {
|
||||||
|
|
||||||
Timer? debounce;
|
Timer? debounce;
|
||||||
WalletData selectedWallet = myWalletProvider.getDefaultWallet();
|
WalletData selectedWallet = myWalletProvider.getDefaultWallet();
|
||||||
bool canValidate = false;
|
|
||||||
String validationStatus = '';
|
|
||||||
|
|
||||||
return PopScope(
|
return PopScope(
|
||||||
onPopInvoked: (_) {
|
onPopInvoked: (_) {
|
||||||
|
@ -44,7 +43,8 @@ class ImportG1v1 extends StatelessWidget {
|
||||||
return FutureBuilder(
|
return FutureBuilder(
|
||||||
future: sub.getBalanceAndIdtyStatus(
|
future: sub.getBalanceAndIdtyStatus(
|
||||||
sub.g1V1NewAddress, selectedWallet.address),
|
sub.g1V1NewAddress, selectedWallet.address),
|
||||||
builder: (BuildContext context, AsyncSnapshot<List> status) {
|
builder: (BuildContext context,
|
||||||
|
AsyncSnapshot<MigrateWalletChecks> status) {
|
||||||
if (status.data == null) {
|
if (status.data == null) {
|
||||||
return Column(children: [
|
return Column(children: [
|
||||||
ScaledSizedBox(height: 80),
|
ScaledSizedBox(height: 80),
|
||||||
|
@ -63,37 +63,7 @@ class ImportG1v1 extends StatelessWidget {
|
||||||
]);
|
]);
|
||||||
}
|
}
|
||||||
|
|
||||||
final Map balance = status.data?[0] ?? {};
|
final statusData = status.data!;
|
||||||
final IdtyStatus idtyStatus = status.data?[1];
|
|
||||||
final IdtyStatus myIdtyStatus = status.data?[2];
|
|
||||||
final bool hasConsumer = status.data?[3] ?? false;
|
|
||||||
final bool isSmith = status.data?[4] ?? false;
|
|
||||||
|
|
||||||
if (balance['transferableBalance'] != 0 && !hasConsumer) {
|
|
||||||
canValidate = true;
|
|
||||||
validationStatus = '';
|
|
||||||
} else {
|
|
||||||
canValidate = false;
|
|
||||||
validationStatus = hasConsumer
|
|
||||||
? 'youMustWaitBeforeCashoutThisAccount'.tr()
|
|
||||||
: 'thisAccountIsEmpty'.tr();
|
|
||||||
}
|
|
||||||
|
|
||||||
if (idtyStatus != IdtyStatus.none &&
|
|
||||||
myIdtyStatus != IdtyStatus.none) {
|
|
||||||
canValidate = false;
|
|
||||||
validationStatus =
|
|
||||||
'youCannotMigrateIdentityToExistingIdentity'.tr();
|
|
||||||
}
|
|
||||||
|
|
||||||
if (isSmith) {
|
|
||||||
canValidate = false;
|
|
||||||
validationStatus = 'smithCantMigrateIdentity'.tr();
|
|
||||||
}
|
|
||||||
|
|
||||||
if (sub.g1V1NewAddress == '') {
|
|
||||||
validationStatus = '';
|
|
||||||
}
|
|
||||||
|
|
||||||
final bool isUdUnit = configBox.get('isUdUnit') ?? false;
|
final bool isUdUnit = configBox.get('isUdUnit') ?? false;
|
||||||
final unit = isUdUnit ? 'ud'.tr(args: ['']) : currencyName;
|
final unit = isUdUnit ? 'ud'.tr(args: ['']) : currencyName;
|
||||||
|
@ -224,7 +194,7 @@ class ImportG1v1 extends StatelessWidget {
|
||||||
Column(
|
Column(
|
||||||
children: [
|
children: [
|
||||||
Text(
|
Text(
|
||||||
'${balance['transferableBalance']} $unit',
|
'${statusData.balance['transferableBalance']} $unit',
|
||||||
style: scaledTextStyle(fontSize: 16),
|
style: scaledTextStyle(fontSize: 16),
|
||||||
),
|
),
|
||||||
IdentityStatus(
|
IdentityStatus(
|
||||||
|
@ -277,7 +247,7 @@ class ImportG1v1 extends StatelessWidget {
|
||||||
elevation: 4,
|
elevation: 4,
|
||||||
backgroundColor: orangeC,
|
backgroundColor: orangeC,
|
||||||
),
|
),
|
||||||
onPressed: canValidate
|
onPressed: statusData.canValidate
|
||||||
? () async {
|
? () async {
|
||||||
WalletData? defaultWallet =
|
WalletData? defaultWallet =
|
||||||
myWalletProvider.getDefaultWallet();
|
myWalletProvider.getDefaultWallet();
|
||||||
|
@ -301,8 +271,8 @@ class ImportG1v1 extends StatelessWidget {
|
||||||
selectedWallet.address,
|
selectedWallet.address,
|
||||||
destPassword:
|
destPassword:
|
||||||
pin ?? myWalletProvider.pinCode,
|
pin ?? myWalletProvider.pinCode,
|
||||||
balance: balance,
|
balance: statusData.balance,
|
||||||
idtyStatus: idtyStatus);
|
idtyStatus: statusData.idtyStatus);
|
||||||
Navigator.pop(context);
|
Navigator.pop(context);
|
||||||
await Navigator.push(
|
await Navigator.push(
|
||||||
context,
|
context,
|
||||||
|
@ -328,7 +298,7 @@ class ImportG1v1 extends StatelessWidget {
|
||||||
),
|
),
|
||||||
ScaledSizedBox(height: 10),
|
ScaledSizedBox(height: 10),
|
||||||
Text(
|
Text(
|
||||||
validationStatus,
|
statusData.validationStatus,
|
||||||
textAlign: TextAlign.center,
|
textAlign: TextAlign.center,
|
||||||
style: scaledTextStyle(
|
style: scaledTextStyle(
|
||||||
fontSize: 14, color: Colors.grey[600]),
|
fontSize: 14, color: Colors.grey[600]),
|
||||||
|
|
|
@ -4,6 +4,7 @@ import 'package:easy_localization/easy_localization.dart';
|
||||||
import 'package:flutter_markdown/flutter_markdown.dart';
|
import 'package:flutter_markdown/flutter_markdown.dart';
|
||||||
import 'package:gecko/globals.dart';
|
import 'package:gecko/globals.dart';
|
||||||
import 'package:flutter/material.dart';
|
import 'package:flutter/material.dart';
|
||||||
|
import 'package:gecko/models/migrate_wallet_checks.dart';
|
||||||
import 'package:gecko/models/scale_functions.dart';
|
import 'package:gecko/models/scale_functions.dart';
|
||||||
import 'package:gecko/models/wallet_data.dart';
|
import 'package:gecko/models/wallet_data.dart';
|
||||||
import 'package:gecko/models/widgets_keys.dart';
|
import 'package:gecko/models/widgets_keys.dart';
|
||||||
|
@ -39,8 +40,6 @@ class MigrateIdentityScreen extends StatelessWidget {
|
||||||
} else {
|
} else {
|
||||||
selectedWallet = defaultWallet;
|
selectedWallet = defaultWallet;
|
||||||
}
|
}
|
||||||
bool canValidate = false;
|
|
||||||
String validationStatus = '';
|
|
||||||
|
|
||||||
final mdStyle = MarkdownStyleSheet(
|
final mdStyle = MarkdownStyleSheet(
|
||||||
p: scaledTextStyle(fontSize: 17, color: Colors.black, letterSpacing: 0.3),
|
p: scaledTextStyle(fontSize: 17, color: Colors.black, letterSpacing: 0.3),
|
||||||
|
@ -72,7 +71,8 @@ class MigrateIdentityScreen extends StatelessWidget {
|
||||||
return FutureBuilder(
|
return FutureBuilder(
|
||||||
future: sub.getBalanceAndIdtyStatus(
|
future: sub.getBalanceAndIdtyStatus(
|
||||||
fromAddress, selectedWallet.address),
|
fromAddress, selectedWallet.address),
|
||||||
builder: (BuildContext context, AsyncSnapshot<List> status) {
|
builder: (BuildContext context,
|
||||||
|
AsyncSnapshot<MigrateWalletChecks> status) {
|
||||||
if (status.data == null) {
|
if (status.data == null) {
|
||||||
return Column(children: [
|
return Column(children: [
|
||||||
ScaledSizedBox(height: 80),
|
ScaledSizedBox(height: 80),
|
||||||
|
@ -89,31 +89,7 @@ class MigrateIdentityScreen extends StatelessWidget {
|
||||||
]);
|
]);
|
||||||
}
|
}
|
||||||
|
|
||||||
final Map balance = status.data?[0] ?? {};
|
final statusData = status.data!;
|
||||||
final IdtyStatus idtyStatus = status.data?[1];
|
|
||||||
final IdtyStatus myIdtyStatus = status.data?[2];
|
|
||||||
final bool hasConsumer = status.data?[3] ?? false;
|
|
||||||
final bool isSmith = status.data?[4] ?? false;
|
|
||||||
|
|
||||||
if (isSmith) {
|
|
||||||
canValidate = false;
|
|
||||||
validationStatus = 'smithCantMigrateIdentity'.tr();
|
|
||||||
} else if (balance['transferableBalance'] != 0 &&
|
|
||||||
!hasConsumer) {
|
|
||||||
canValidate = true;
|
|
||||||
validationStatus = '';
|
|
||||||
} else if (idtyStatus != IdtyStatus.none &&
|
|
||||||
myIdtyStatus != IdtyStatus.none) {
|
|
||||||
canValidate = false;
|
|
||||||
validationStatus =
|
|
||||||
'youCannotMigrateIdentityToExistingIdentity'.tr();
|
|
||||||
} else {
|
|
||||||
canValidate = false;
|
|
||||||
validationStatus = hasConsumer
|
|
||||||
? 'youMustWaitBeforeCashoutThisAccount'.tr(args: ['X'])
|
|
||||||
: 'thisAccountIsEmpty'.tr();
|
|
||||||
}
|
|
||||||
|
|
||||||
final walletsList = myWalletProvider.listWallets.toList();
|
final walletsList = myWalletProvider.listWallets.toList();
|
||||||
|
|
||||||
walletsList
|
walletsList
|
||||||
|
@ -131,7 +107,7 @@ class MigrateIdentityScreen extends StatelessWidget {
|
||||||
data: 'areYouSureMigrateIdentity'.tr(args: [
|
data: 'areYouSureMigrateIdentity'.tr(args: [
|
||||||
duniterIndexer.walletNameIndexer[fromAddress] ??
|
duniterIndexer.walletNameIndexer[fromAddress] ??
|
||||||
'???',
|
'???',
|
||||||
'${balance['transferableBalance']} $unit'
|
'${statusData.balance['transferableBalance']} $unit'
|
||||||
]),
|
]),
|
||||||
styleSheet: mdStyle),
|
styleSheet: mdStyle),
|
||||||
),
|
),
|
||||||
|
@ -171,7 +147,7 @@ class MigrateIdentityScreen extends StatelessWidget {
|
||||||
elevation: 4,
|
elevation: 4,
|
||||||
backgroundColor: orangeC,
|
backgroundColor: orangeC,
|
||||||
),
|
),
|
||||||
onPressed: canValidate
|
onPressed: statusData.canValidate
|
||||||
? () async {
|
? () async {
|
||||||
WalletData? defaultWallet =
|
WalletData? defaultWallet =
|
||||||
myWalletProvider.getDefaultWallet();
|
myWalletProvider.getDefaultWallet();
|
||||||
|
@ -196,7 +172,7 @@ class MigrateIdentityScreen extends StatelessWidget {
|
||||||
fromPassword: pin ?? myWalletProvider.pinCode,
|
fromPassword: pin ?? myWalletProvider.pinCode,
|
||||||
destPassword: pin ?? myWalletProvider.pinCode,
|
destPassword: pin ?? myWalletProvider.pinCode,
|
||||||
withBalance: true,
|
withBalance: true,
|
||||||
fromBalance: balance);
|
fromBalance: statusData.balance);
|
||||||
Navigator.push(
|
Navigator.push(
|
||||||
context,
|
context,
|
||||||
MaterialPageRoute(builder: (context) {
|
MaterialPageRoute(builder: (context) {
|
||||||
|
@ -221,7 +197,7 @@ class MigrateIdentityScreen extends StatelessWidget {
|
||||||
),
|
),
|
||||||
ScaledSizedBox(height: 10),
|
ScaledSizedBox(height: 10),
|
||||||
Text(
|
Text(
|
||||||
validationStatus,
|
statusData.validationStatus,
|
||||||
textAlign: TextAlign.center,
|
textAlign: TextAlign.center,
|
||||||
style:
|
style:
|
||||||
scaledTextStyle(fontSize: 15, color: Colors.grey[600]),
|
scaledTextStyle(fontSize: 15, color: Colors.grey[600]),
|
||||||
|
|
Loading…
Reference in New Issue