我正在尝试执行compute()的重方法。
我试过了。执行loop后,Text小部件更新,但几乎在按下按钮后result立即返回0。
有人知道我错过了什么吗?
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;
});
}发布于 2018-09-06 13:43:36
根据https://api.flutter.dev/flutter/foundation/compute-constant.html的说法,
回调参数必须是顶级函数,而不是闭包、实例或类的静态方法。
请删除static关键字,它应该可以正常工作
发布于 2020-06-06 21:24:08
下面是一个计算示例:
final sum = await compute(computationallyExpensiveTask, 1000000000);这是在计算隔离中运行的函数:
int computationallyExpensiveTask(int value) {
var sum = 0;
for (var i = 0; i <= value; i++) {
sum += i;
}
print('finished');
return sum;
}备注:
compute的函数必须是顶级函数(而不是在类中)。代码
以下是上下文中的完整代码。循环进度指示器停止旋转,因为当您直接执行computationallyExpensiveTask时,UI被阻塞。

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;
}https://stackoverflow.com/questions/52196555
复制相似问题