首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >颤振计算方法

颤振计算方法
EN

Stack Overflow用户
提问于 2018-09-06 12:34:16
回答 2查看 17.5K关注 0票数 17

我正在尝试执行compute()的重方法。

我试过了。执行loop后,Text小部件更新,但几乎在按下按钮后result立即返回0。

有人知道我错过了什么吗?

代码语言:javascript
复制
 int _counter;

  static int loop(int val) {
    int count = 0;
    for (int i = 1; i <= val; i++) {
      count += i;
    }
    return count;
  }

  Future<void> _onPressed() async {
    int result = await compute(loop, 1000000000000000000);
    setState(() {
      _counter = result;
    });
  }
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-09-06 13:43:36

根据https://api.flutter.dev/flutter/foundation/compute-constant.html的说法,

回调参数必须是顶级函数,而不是闭包、实例或类的静态方法。

请删除static关键字,它应该可以正常工作

票数 20
EN

Stack Overflow用户

发布于 2020-06-06 21:24:08

下面是一个计算示例:

代码语言:javascript
复制
final sum = await compute(computationallyExpensiveTask, 1000000000);

这是在计算隔离中运行的函数:

代码语言:javascript
复制
int computationallyExpensiveTask(int value) {
  var sum = 0;
  for (var i = 0; i <= value; i++) {
    sum += i;
  }
  print('finished');
  return sum;
}

备注:

  • 正如在接受答案中提到的,您提供给compute的函数必须是顶级函数(而不是在类中)。

代码

以下是上下文中的完整代码。循环进度指示器停止旋转,因为当您直接执行computationallyExpensiveTask时,UI被阻塞。

代码语言:javascript
复制
import 'package:flutter/foundation.dart';
import 'package:flutter/material.dart';

void main() => runApp(MyApp());

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        body: BodyWidget(),
      ),
    );
  }
}

class BodyWidget extends StatelessWidget {

  @override
  Widget build(BuildContext context) {
    return Center(
      child: Column(
        mainAxisSize: MainAxisSize.min,
        children: <Widget>[
          CircularProgressIndicator(),
          RaisedButton(
            child: Text('start'),
            onPressed: () async {
              final sum = computationallyExpensiveTask(1000000000);
              //final sum = await compute(computationallyExpensiveTask, 1000000000);
              print(sum);
            },
          )
        ],
      ),
    );
  }
}


int computationallyExpensiveTask(int value) {
  var sum = 0;
  for (var i = 0; i <= value; i++) {
    sum += i;
  }
  print('finished');
  return sum;
}
票数 8
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52196555

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档