Flutter计算方法冻结UI



初始化

class MyHomePage extends StatefulWidget{
@override
_MyHomePageState createState() => _MyHomePageState();
}

状态类别:

class _MyHomePageState extends State<MyHomePage> {
int prime;

bool isPrime(int n) {
int count = 0;
for(int i = 1 ; i <= n; ++i) {
if (n % i == 0) {
++count;
}
}
return count == 2;
}

在这里,作者使用了++i而不是i++

/// Returns the nth prime number.
int getnthPrime(int n) {
int currentPrimeCount = 0;
int candidate = 1;
while(currentPrimeCount < n) {
++candidate;
if (isPrime(candidate)) {
++currentPrimeCount;
}     }
return candidate;    
}
void _getPrime() async {
int ans = await compute(getnthPrime,10);
setState((){
prime=ans;
});
}

@override
Widget build(BuildContext context) {
return MaterialApp( 
home: Scaffold(
appBar: AppBar(
title: const Text('Basic AppBar'),
),
body: Column( 
children: <Widget> [ 
Padding(
padding: const EdgeInsets.all(16.0),
child: RaisedButton(child:Text('GEN'), onPressed: _getPrime,)
),
Text('result : $prime'),
]),
),
);
}
}

我在网上找到了这段代码,用于使用异步计算使flutter更容易工作的教程,但当我单击按钮时,代码冻结了。。为什么?

作者在getinth函数上添加了静态int,但这样做会导致编译错误。所以我删除了静态关键字

isPrime就像名字所暗示的那样,应该是检查一个数字是否是PrimeNumbers。

它与手机型号或安卓版本有关吗??我在3GB手机中安装了已发布的apped

getnthPrime(传递给compute(...)的函数必须是顶级函数。
它必须在类之外声明。

最新更新