首页 > 解决方案 > 函数挂起 UI

问题描述

我正在使用 Dart、AndroidStudio、Flutter

我需要调用一个函数来散列我的密码。哈希函数需要时间来执行。代码应该在印刷机上运行。功能是:

String getHash(Stirng input)

我称之为如下:

onPressed:{
           newPass=getHash(currentPass);
          }

它阻塞了 UI 线程。该函数来自某些 API,因此无法编辑。

我做了一个async方法并调用getHash()async函数。

Future<String> asyncMethodToGetHash(String input) async{
     return await geHash(input);
}

但它仍然阻塞了 UI 线程。我应该如何调用它以使 UI 不被阻塞?

标签: androidapiflutter

解决方案


您可以使用compute()颤振提供的方法,该方法将在单独的隔离中运行代码(相当于线程的飞镖)。像这样的东西:

static String getHash(String input){
     return hash(input); // your code to calculate hash here.
}

String computeHash(String input){
     return await compute(getHash, input);
}

请记住,您传递给compute()方法的函数必须是静态的,并且只能接受一个参数。由于隔离不共享内存,因此函数中使用的每个变量都必须作为参数传递。因此,如果您必须将多个方法传递给函数,则必须制作一个参数列表。


推荐阅读