Skip to content
Snippets Groups Projects
Commit ee88042b authored by poka's avatar poka
Browse files

enh: refactor checks for wallets import (#40)

parent 5718d170
Branches
Tags
No related merge requests found
Pipeline #35128 waiting for manual action
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:gecko/globals.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/providers/duniter_indexer.dart';
import 'package:gecko/providers/home.dart';
......@@ -886,12 +887,18 @@ class SubstrateSdk with ChangeNotifier {
return g1V1NewAddress;
}
Future<List> getBalanceAndIdtyStatus(
Future<MigrateWalletChecks> getBalanceAndIdtyStatus(
String fromAddress, String toAddress) async {
final sub = Provider.of<SubstrateSdk>(homeContext, listen: false);
bool canValidate = false;
String validationStatus = '';
final fromBalance = fromAddress == ''
? {'transferableBalance': 0}
: await getBalance(fromAddress);
final transferableBalance = fromBalance['transferableBalance'];
final statusList = await idtyStatus([fromAddress, toAddress]);
final fromIdtyStatus = statusList[0];
final fromHasConsumer =
......@@ -899,13 +906,31 @@ class SubstrateSdk with ChangeNotifier {
final toIdtyStatus = statusList[1];
final isSmithData = await isSmith(fromAddress);
return [
fromBalance,
fromIdtyStatus,
toIdtyStatus,
fromHasConsumer,
isSmithData
];
// Check conditions to set 'canValidate' and 'validationStatus'
if (transferableBalance != 0 && !fromHasConsumer) {
canValidate = true;
} else if (toIdtyStatus != IdtyStatus.none &&
fromIdtyStatus != IdtyStatus.none) {
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:gecko/globals.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/wallet_data.dart';
import 'package:gecko/models/widgets_keys.dart';
......@@ -29,8 +30,6 @@ class ImportG1v1 extends StatelessWidget {
Timer? debounce;
WalletData selectedWallet = myWalletProvider.getDefaultWallet();
bool canValidate = false;
String validationStatus = '';
return PopScope(
onPopInvoked: (_) {
......@@ -44,7 +43,8 @@ class ImportG1v1 extends StatelessWidget {
return FutureBuilder(
future: sub.getBalanceAndIdtyStatus(
sub.g1V1NewAddress, selectedWallet.address),
builder: (BuildContext context, AsyncSnapshot<List> status) {
builder: (BuildContext context,
AsyncSnapshot<MigrateWalletChecks> status) {
if (status.data == null) {
return Column(children: [
ScaledSizedBox(height: 80),
......@@ -63,37 +63,7 @@ class ImportG1v1 extends StatelessWidget {
]);
}
final Map balance = status.data?[0] ?? {};
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 statusData = status.data!;
final bool isUdUnit = configBox.get('isUdUnit') ?? false;
final unit = isUdUnit ? 'ud'.tr(args: ['']) : currencyName;
......@@ -224,7 +194,7 @@ class ImportG1v1 extends StatelessWidget {
Column(
children: [
Text(
'${balance['transferableBalance']} $unit',
'${statusData.balance['transferableBalance']} $unit',
style: scaledTextStyle(fontSize: 16),
),
IdentityStatus(
......@@ -277,7 +247,7 @@ class ImportG1v1 extends StatelessWidget {
elevation: 4,
backgroundColor: orangeC,
),
onPressed: canValidate
onPressed: statusData.canValidate
? () async {
WalletData? defaultWallet =
myWalletProvider.getDefaultWallet();
......@@ -301,8 +271,8 @@ class ImportG1v1 extends StatelessWidget {
selectedWallet.address,
destPassword:
pin ?? myWalletProvider.pinCode,
balance: balance,
idtyStatus: idtyStatus);
balance: statusData.balance,
idtyStatus: statusData.idtyStatus);
Navigator.pop(context);
await Navigator.push(
context,
......@@ -328,7 +298,7 @@ class ImportG1v1 extends StatelessWidget {
),
ScaledSizedBox(height: 10),
Text(
validationStatus,
statusData.validationStatus,
textAlign: TextAlign.center,
style: scaledTextStyle(
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:gecko/globals.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/wallet_data.dart';
import 'package:gecko/models/widgets_keys.dart';
......@@ -39,8 +40,6 @@ class MigrateIdentityScreen extends StatelessWidget {
} else {
selectedWallet = defaultWallet;
}
bool canValidate = false;
String validationStatus = '';
final mdStyle = MarkdownStyleSheet(
p: scaledTextStyle(fontSize: 17, color: Colors.black, letterSpacing: 0.3),
......@@ -72,7 +71,8 @@ class MigrateIdentityScreen extends StatelessWidget {
return FutureBuilder(
future: sub.getBalanceAndIdtyStatus(
fromAddress, selectedWallet.address),
builder: (BuildContext context, AsyncSnapshot<List> status) {
builder: (BuildContext context,
AsyncSnapshot<MigrateWalletChecks> status) {
if (status.data == null) {
return Column(children: [
ScaledSizedBox(height: 80),
......@@ -89,31 +89,7 @@ class MigrateIdentityScreen extends StatelessWidget {
]);
}
final Map balance = status.data?[0] ?? {};
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 statusData = status.data!;
final walletsList = myWalletProvider.listWallets.toList();
walletsList
......@@ -131,7 +107,7 @@ class MigrateIdentityScreen extends StatelessWidget {
data: 'areYouSureMigrateIdentity'.tr(args: [
duniterIndexer.walletNameIndexer[fromAddress] ??
'???',
'${balance['transferableBalance']} $unit'
'${statusData.balance['transferableBalance']} $unit'
]),
styleSheet: mdStyle),
),
......@@ -171,7 +147,7 @@ class MigrateIdentityScreen extends StatelessWidget {
elevation: 4,
backgroundColor: orangeC,
),
onPressed: canValidate
onPressed: statusData.canValidate
? () async {
WalletData? defaultWallet =
myWalletProvider.getDefaultWallet();
......@@ -196,7 +172,7 @@ class MigrateIdentityScreen extends StatelessWidget {
fromPassword: pin ?? myWalletProvider.pinCode,
destPassword: pin ?? myWalletProvider.pinCode,
withBalance: true,
fromBalance: balance);
fromBalance: statusData.balance);
Navigator.push(
context,
MaterialPageRoute(builder: (context) {
......@@ -221,7 +197,7 @@ class MigrateIdentityScreen extends StatelessWidget {
),
ScaledSizedBox(height: 10),
Text(
validationStatus,
statusData.validationStatus,
textAlign: TextAlign.center,
style:
scaledTextStyle(fontSize: 15, color: Colors.grey[600]),
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment