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: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]),
|
||||
|
|
Loading…
Reference in New Issue