Flutter中compute函数未定义报错:后台运行scrypt函数遇问题
解决Flutter中compute未定义及scrypt后台运行问题
我来帮你排查下遇到的问题,咱们一步步解决:
1. 修复compute函数未定义的报错
compute函数来自dart:isolate库,你当前只导入了dart:async,所以需要补充导入这个库:
import 'dart:isolate'; // 新增这个导入 import "package:pointycastle/pointycastle.dart" as PC; import 'dart:async';
2. 修正computeKey函数的参数赋值错误
你在computeKey里犯了个小笔误——把password和salt都赋值成了param[1],这会导致用salt当作密码来处理,完全不符合预期。修正后的代码应该是:
Uint8List computeKey(List<Uint8List> param) { Uint8List password = param[0]; // 这里改为param[0]对应传入的password Uint8List salt = param[1]; PC.KeyDerivator scrypt = PC.KeyDerivator("scrypt"); scrypt.init(PC.ScryptParameters(16384, 8, 1, 49, salt)); return scrypt.process(password); }
3. 额外注意事项
- 确保你的
pointycastle依赖是最新稳定版本,避免因旧版API差异导致的问题,在pubspec.yaml中可以这样配置:dependencies: pointycastle: ^3.7.3 # 建议使用最新稳定版 - 选择用
compute把scrypt计算放到隔离线程是非常合理的,因为scrypt属于计算密集型操作,这样能避免阻塞UI线程,保证APP的流畅性。
内容的提问来源于stack exchange,提问作者Matthew Cornelisse
相关产品推荐
相关产品推荐

