Flutter Compute метод заморозить пользовательский интерфейс - PullRequest
0 голосов
/ 07 ноября 2018

1001 * INIT *

 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'),
     ]),
      ),

    );

  }
}

У меня есть этот код, найденный в сети, для учебника, использующего асинхронные вычисления, чтобы облегчить работу флаттера, но код зависает, когда я нажимаю кнопку .. почему?

писатель добавляет static int в функцию getinth, но это приводит к ошибке компиляции. поэтому я удаляю статические ключевые слова

isPrime, как следует из названия, должен проверять, является ли число PrimeNumbers.

Это как-то связано с моделями телефонов или версиями для Android? Я установил выпущенное приложение в телефон 3 ГБ

1 Ответ

0 голосов
/ 07 ноября 2018

getnthPrime (функция, переданная в compute(...), должна быть функцией верхнего уровня.
Он должен быть объявлен вне класса.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...