Async/Await — передать строку после генерации в функцию

Я новичок в этой проблеме асинхронности/ожидания во Flutter. Как мне дождаться, покаmnemonicгенерируется, только я передаю его вgeneratePrivateKey. После этого я хотел бы показать_getKeyпосле получения закрытого ключа.

      class _MyHomePageState extends State<MyHomePage> {
  String mnemonic = GenAddress().generateMnemonic();
  final Future<String> _getKey = GenAddress().getPrivateKey(mnemonic);

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      body: DefaultTextStyle(
        style: Theme.of(context).textTheme.displayMedium!,
        child: FutureBuilder<String>(
          future: _getKey, // a previously-obtained Future<String> or null
          builder: (BuildContext context, AsyncSnapshot<String> snapshot) {
            List<Widget> children;
            if (mnemonic != "") {
              children = <Widget>[
                Padding(
                  padding: const EdgeInsets.only(top: 16),
                  child: Text('Result: $_getKey'),
                ),
              ];
            } else if (snapshot.hasError) {
              children = <Widget>[
                Padding(
                  padding: const EdgeInsets.only(top: 16),
                  child: Text('Error'),
                ),
              ];
            } else {
              children = const <Widget>[
                Padding(
                  padding: EdgeInsets.only(top: 16),
                  child: Text('Awaiting result...'),
                ),
              ];
            }
            return Center(
              child: Column(
                mainAxisAlignment: MainAxisAlignment.center,
                children: children,
              ),
            );
          },
        ),
      ),
    );
  }
}

Вот мой код дляgenerateMnemonicиgetPrivateKey

      class GenAddress implements GetAddressETH {
  String hdPath = "m/44'/60'/0'/0";

  @override
  String generateMnemonic() {
    return bip39.generateMnemonic();
  }

  @override
  Future<String> getPrivateKey(String mnemonic) async {
    final isValidMnemonic = bip39.validateMnemonic(mnemonic);
    if(!isValidMnemonic) {
      throw 'Invalid mnemonic';
    }
    final seed = bip39.mnemonicToSeed(mnemonic);
    final root = bip32.BIP32.fromSeed(seed);

    const first = 0;
    final firstChild = root.derivePath("$hdPath/$first");
    final privateKey = HEX.encode(firstChild.privateKey as List<int>);

    return privateKey;
  }
}

0 ответов

Другие вопросы по тегам