Asynchronous 颤振计算方法冻结用户界面

Asynchronous 颤振计算方法冻结用户界面,asynchronous,flutter,Asynchronous,Flutter,初始化 国家级: class MyHomePage extends StatefulWidget{ @override _MyHomePageState createState() => _MyHomePageState(); } class\u MyHomePageState扩展状态{ 整数素数; bool isPrime(int n){ 整数计数=0; 对于(int i=1;igetnthPrime(传递给compute(…)的函数)需要是顶级函数。 它

初始化

国家级:

 class MyHomePage extends StatefulWidget{
    @override
      _MyHomePageState createState() => _MyHomePageState();
    }
class\u MyHomePageState扩展状态{
整数素数;
bool isPrime(int n){
整数计数=0;
对于(int i=1;i
getnthPrime
(传递给
compute(…)的函数)
需要是顶级函数。

它必须在类之外声明。

尝试通过使函数全局化来修复代码是的,谢谢兄弟。顺便说一句,如何使用COMPUTE as BUILD method(BuildContext上下文)“如何使用COMPUTE as BUILD method”不要这样做。在
initState
中使用它,当结果到达时调用
setState
。@GünterZöchbauer您好,有没有示例如何将此函数放在顶级?只需将其放在类之外。
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;
  }
  /// 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'),
     ]),
      ),

    );

  }
}