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;
}
}