这是一个计算示例:
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;
}