flutter 异步调用不会 运行 在 initState() 中异步
flutter async call doesn't run asynchronously in initState()
我在 initState() 中调用异步函数,
但系统实际上等待异步函数的结果。
谁能告诉我为什么?
这是我的代码:
import 'package:flutter/material.dart';
void main() => runApp(MyApp());
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(home: MyHomePage());
}
}
class MyHomePage extends StatefulWidget {
@override
_MyHomePageState createState() => _MyHomePageState();
}
class _MyHomePageState extends State<MyHomePage> {
Future<int> _f;
@override
void initState() {
super.initState();
Stopwatch stopwatch = new Stopwatch()..start();
print('executed in ${stopwatch.elapsed}');
_f = getFuture();
print('executed in ${stopwatch.elapsed}');
}
Future<int> getFuture() async {
int i = 0;
while(i < 1000000000) {
i++;
}
return i;
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(title: const Text("test")),
body: FutureBuilder<int>(
future: _f,
builder: (context, snapshot) {
switch (snapshot.connectionState) {
case ConnectionState.done:
return Center(child: Text("snapshot: ${snapshot.data}"));
break;
default:
return Center(child: CircularProgressIndicator());
}
}
),
);
}
}
这是输出:
I/flutter (22058): executed in 0:00:00.000384
I/flutter (22058): executed in 0:00:04.536278
Future
函数是异步地 return 一个 Future
对象。这意味着执行一次代码语句将花费更长的时间,例如从 api 获取 json 对象,而不是正常语句所需的通常时间,例如声明变量.
但是,您执行的是普通语句,需要 运行 毫秒 1000000000
次。这将导致更长的执行时间,这是由每次执行的毫秒数构成的。
尽管它是一个 Future
函数,但它不是 returning 一个 Future
对象或变量,因此它不是异步的。
我在 initState() 中调用异步函数, 但系统实际上等待异步函数的结果。 谁能告诉我为什么?
这是我的代码:
import 'package:flutter/material.dart';
void main() => runApp(MyApp());
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(home: MyHomePage());
}
}
class MyHomePage extends StatefulWidget {
@override
_MyHomePageState createState() => _MyHomePageState();
}
class _MyHomePageState extends State<MyHomePage> {
Future<int> _f;
@override
void initState() {
super.initState();
Stopwatch stopwatch = new Stopwatch()..start();
print('executed in ${stopwatch.elapsed}');
_f = getFuture();
print('executed in ${stopwatch.elapsed}');
}
Future<int> getFuture() async {
int i = 0;
while(i < 1000000000) {
i++;
}
return i;
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(title: const Text("test")),
body: FutureBuilder<int>(
future: _f,
builder: (context, snapshot) {
switch (snapshot.connectionState) {
case ConnectionState.done:
return Center(child: Text("snapshot: ${snapshot.data}"));
break;
default:
return Center(child: CircularProgressIndicator());
}
}
),
);
}
}
这是输出:
I/flutter (22058): executed in 0:00:00.000384
I/flutter (22058): executed in 0:00:04.536278
Future
函数是异步地 return 一个 Future
对象。这意味着执行一次代码语句将花费更长的时间,例如从 api 获取 json 对象,而不是正常语句所需的通常时间,例如声明变量.
但是,您执行的是普通语句,需要 运行 毫秒 1000000000
次。这将导致更长的执行时间,这是由每次执行的毫秒数构成的。
尽管它是一个 Future
函数,但它不是 returning 一个 Future
对象或变量,因此它不是异步的。