gpt4 book ai didi

flutter - 即使使用异步,在 Flutter 中进行繁重的计算操作时 UI 也会滞后

转载 作者:行者123 更新时间:2023-12-04 17:19:40 31 4
gpt4 key购买 nike

我正在 Flutter 中开发密码管理器应用程序,同时为我的哈希函数运行此代码片段:

import 'package:encrypt/encrypt.dart' as EncryptLib;
import 'package:pinenacl/key_derivation.dart' as HashLib;

Map<String, String> hash(String masterPass) {
final salt = EncryptLib.IV.fromSecureRandom(16);

final hashedMasterPass = HashLib.PBKDF2
.hmac_sha512(utf8.encode(masterPass), salt.bytes, 100100, 32);

return {
"hashedMasterPass": base64.encode(hashedMasterPass),
"salt": salt.base64,
};
}

当我从一个按钮调用这个函数时,例如:

TextButton(
child: Text("Hash Password"),
onPressed: () {
print(hash("ThisIsTheMasterPassword"));
})

按钮按下的动画完全停止,UI 的其余部分也是如此,我阅读了一些关于 Futures 和异步的内容并提出了以下内容,希望 UI 不会卡住:

Future<Map<String, String>> hash(String masterPass) async {
final salt = EncryptLib.IV.fromSecureRandom(16);

final hashedMasterPass = HashLib.PBKDF2
.hmac_sha512(utf8.encode(masterPass), salt.bytes, 100100, 32);

return {
"hashedMasterPass": base64.encode(hashedMasterPass),
"salt": salt.base64,
};
}

和...

TextButton(
child: Text("Hash Password"),
onPressed: () {
hash("ThisIsTheMasterPassword").then((value) {
print(value);
});
})

相同的结果,UI 仍然像以前一样卡住,有什么办法可以让这个特定代码不卡住 UI?

最佳答案

代替这个

TextButton(
child: Text("Hash Password"),
onPressed: () {
hash("ThisIsTheMasterPassword").then((value) {
print(value);
});
})

用这个

TextButton(
child: Text("Hash Password"),
onPressed: () async{
hash("ThisIsTheMasterPassword").then((value) {
print(value);
});
})

TextButton(
child: Text("Hash Password"),
onPressed: ()async {
var value=await hash("ThisIsTheMasterPassword");
print(value);

})

您可以使用isolate 从主线程中计算某物。 https://www.youtube.com/watch?v=qrFTt1NZed8

compute(hash, "ThisIsTheMasterPassword");

进一步阅读 https://flutter.dev/docs/cookbook/networking/background-parsing

关于flutter - 即使使用异步,在 Flutter 中进行繁重的计算操作时 UI 也会滞后,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66974781/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com