Select Git revision
migrate_identity.dart
migrate_identity.dart 18.04 KiB
// ignore_for_file: use_build_context_synchronously
import 'package:easy_localization/easy_localization.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/widgets_keys.dart';
import 'package:gecko/providers/duniter_indexer.dart';
import 'package:gecko/providers/generate_wallets.dart';
import 'package:gecko/providers/my_wallets.dart';
import 'package:gecko/providers/substrate_sdk.dart';
import 'package:gecko/providers/wallet_options.dart';
import 'package:gecko/providers/wallets_profiles.dart';
import 'package:gecko/screens/transaction_in_progress.dart';
import 'package:gecko/utils.dart';
import 'package:gecko/widgets/balance_display.dart';
import 'package:gecko/widgets/commons/text_markdown.dart';
import 'package:gecko/widgets/commons/top_appbar.dart';
import 'package:polkawallet_sdk/api/apiKeyring.dart';
import 'package:provider/provider.dart';
class MigrateIdentityScreen extends StatelessWidget {
const MigrateIdentityScreen({super.key});
@override
Widget build(BuildContext context) {
final walletOptions = Provider.of<WalletOptionsProvider>(context, listen: false);
final myWalletProvider = Provider.of<MyWalletsProvider>(context, listen: false);
final generatedWalletsProvider = Provider.of<GenerateWalletsProvider>(context, listen: false);
final duniterIndexer = Provider.of<DuniterIndexer>(context, listen: false);
final sub = Provider.of<SubstrateSdk>(context, listen: false);
final screenSize = MediaQuery.of(context).size;
final isSmallScreen = screenSize.height < 700;
final fromAddress = walletOptions.address.text;
final newMnemonicSentence = TextEditingController();
final newWalletAddress = TextEditingController();
var statusData = const MigrateWalletChecks.defaultValues();
var mnemonicIsValid = false;
int? matchDerivationNbr;
String matchInfo = '';
Future scanDerivations() async {
if (!await isAddress(newWalletAddress.text) || !await sub.isMnemonicValid(newMnemonicSentence.text) || !statusData.canValidate) {
mnemonicIsValid = false;
matchInfo = '';
walletOptions.reload();
return;
}
log.d('Scan derivations to find a match');
//Scan root wallet
final addressData = await sub.sdk.api.keyring.addressFromMnemonic(
sub.currencyParameters['ss58']!,
cryptoType: CryptoType.sr25519,
mnemonic: newMnemonicSentence.text,
);
if (addressData.address == newWalletAddress.text) {
matchDerivationNbr = -1;
mnemonicIsValid = true;
walletOptions.reload();
return;
}
//Scan derivations
for (int derivationNbr in [for (var i = 0; i < generatedWalletsProvider.numberScan; i += 1) i]) {
final addressData = await sub.sdk.api.keyring.addressFromMnemonic(