样例代码
import 'package:flutter/material.dart';
import 'dart:async';
void main() => runApp(MyApp());
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
// TODO: implement build
return MaterialApp(
home: Scaffold(
body: Center(child: AsyncTest()),
));
}
}
class AsyncTest extends StatefulWidget {
@override
_AsyncTestState createState() => _AsyncTestState();
}
int getNumber(int n) {
if (n == 0) {
return 0;
} else if (n == 1) {
return 1;
} else {
return getNumber(n - 1) + getNumber(n - 2);
}
}
Future loadAsset(BuildContext context) async {
return await DefaultAssetBundle.of(context)
.loadString('assets/novels/0-1.txt');
}
class _AsyncTestState extends State {
bool loading = true;
@override
void initState() {
super.initState();
loadAsset(context).then((result) {
debugPrint(
'consume cpu time function result is ' + getNumber(20).toString());
Future.delayed(Duration(seconds: 1)).then((result) {
setState(() {
loading = false;
});
});
});
}
@override
Widget build(BuildContext context) {
// TODO: implement build
if (loading == true) {
return CircularProgressIndicator();
}
return Text('load finished ');
}
}
几点说明:
- 使用StatefulWidget 有状态Widget
- 在initState函数中执行异步操作
- 保证在已有结果的状态下调用setState
参考:
https://flutter.institute/run-async-operation-on-widget-creation/
Leave a Reply